bc_trace_mutex execution_table;
bc_trace_mutex memory_table;
bc_trace_mutex lock_table;
-bc_trace_list lock_free;
+bc_trace_list lock_free;
bc_trace_mutex file_table;
// incase lock set after task ends
static const char *last_lock_location = 0;
trace_item::trace_item(bc_trace_t &t) : table(t) { ++table.size; }
-trace_item::~trace_item() { --table.size; }
+trace_item::~trace_item() { --table.size; }
extern "C" void dump()
{
last_lock_title = title;
last_lock_location = loc;
lock_item *it;
- if( lock_table.size >= TOTAL_LOCKS ) {
+ if( (it=(lock_item*)lock_free.first) != 0 )
+ lock_free.remove_pointer(it);
+ else if( lock_table.size >= TOTAL_LOCKS ) {
it = (lock_item*)lock_table.first;
lock_table.remove_pointer(it);
}
- else if( (it=(lock_item*)lock_free.first) != 0 )
- lock_free.remove_pointer(it);
else
it = new lock_item();
it->set(info, title, loc);
while( p ) {
lock_item *lp = p; p = (lock_item*)p->next;
if( lp->info != info ) continue;
- lock_table.remove_pointer(p); lock_free.append(p);
+ lock_table.remove_pointer(lp); lock_free.append(lp);
}
lock_table.unlock();
}
while( p ) {
lock_item *lp = p; p = (lock_item*)p->next;
if( lp->tid != tid ) continue;
- lock_table.remove_pointer(p); lock_free.append(p);
+ lock_table.remove_pointer(lp); lock_free.append(lp);
}
lock_table.unlock();
}