#include "ardour/debug.h"
#include "ardour/session_event.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace std;
using namespace ARDOUR;
pool = new PerThreadPool;
}
+bool
+SessionEvent::has_per_thread_pool ()
+{
+ return pool->has_per_thread_pool ();
+}
+
void
SessionEvent::create_per_thread_pool (const std::string& name, uint32_t nitems)
{
SessionEvent* ev = static_cast<SessionEvent*> (p->alloc ());
DEBUG_TRACE (DEBUG::SessionEvents, string_compose ("%1 Allocating SessionEvent from %2 ev @ %3 pool size %4 free %5 used %6\n", pthread_name(), p->name(), ev,
p->total(), p->available(), p->used()));
-
-#ifndef NDEBUG
- if (DEBUG::SessionEvents & PBD::debug_bits) {
- // stacktrace (cerr, 40);
- }
-#endif
+
ev->own_pool = p;
return ev;
}
void
SessionEvent::operator delete (void *ptr, size_t /*size*/)
{
- Pool* p = pool->per_thread_pool ();
+ Pool* p = pool->per_thread_pool (false);
SessionEvent* ev = static_cast<SessionEvent*> (ptr);
DEBUG_TRACE (DEBUG::SessionEvents, string_compose (
pthread_name(), ev, enum_2_string (ev->type), enum_2_string (ev->action), p->name(), ev->own_pool->name(), ev->own_pool->total(), ev->own_pool->available(), ev->own_pool->used()
));
-#ifndef NDEBUG
- if (DEBUG::SessionEvents & PBD::debug_bits) {
- // stacktrace (cerr, 40);
- }
-#endif
-
- if (p == ev->own_pool) {
+ if (p && p == ev->own_pool) {
p->release (ptr);
} else {
+ assert(ev->own_pool);
ev->own_pool->push (ev);
DEBUG_TRACE (DEBUG::SessionEvents, string_compose ("%1 was wrong thread for this pool, pushed event onto pending list, will be deleted on next alloc from %2 pool size %3 free %4 used %5 pending %6\n",
pthread_name(), ev->own_pool->name(),