Beispiel #1
0
void CTransactionContainer::reap()
{
	WriteLock();
	CTList::iterator p;
	p=tlist.begin();	
	double diff;
	RTK_TIME tm;
	CTransaction *t;
	rtk_time_mark(&tm);
	while(p!=tlist.end()){			  
		t = *p;
		assert(&(*p)->birth == &((*p)->birth));
		diff = rtk_time_diff(&tm,&((*p)->birth));
		if(diff > t->life && !t->m_iRefcount){
			p=tlist.erase(p);
			char guid_name[128];
			t->Guid.to_string(guid_name);
			DEBUG_PRINTF((
				">>T %s,too old(%.0f>%.0f),removing.\n",
				guid_name,diff, t->life
				));
			t->OnTimeout();
			delete t;
		}else{
			p++;
		}
	}
	Release();
}