#else
#endif
+//#define _DEVDEBUG_
#include "LocalTraceBufferPool.hxx"
#include "BaseTraceCollector.hxx"
#include "LocalTraceCollector.hxx"
// Class static attributes initialisation
LocalTraceBufferPool* LocalTraceBufferPool::_singleton = 0;
-#ifndef WNT
-pthread_mutex_t LocalTraceBufferPool::_singletonMutex;
-#else
+//#ifndef WNT
+//pthread_mutex_t LocalTraceBufferPool::_singletonMutex;
+//#else
pthread_mutex_t LocalTraceBufferPool::_singletonMutex =
PTHREAD_MUTEX_INITIALIZER;
-#endif
+//#endif
BaseTraceCollector *LocalTraceBufferPool::_myThreadTrace = 0;
// ============================================================================
ret = pthread_mutex_lock(&_singletonMutex); // acquire lock to be alone
if (_singleton == 0) // another thread may have got
{ // the lock after the first test
- _singleton = new LocalTraceBufferPool();
+ DEVTRACE("New buffer pool");
+ LocalTraceBufferPool* myInstance = new LocalTraceBufferPool();
DESTRUCTOR_OF<LocalTraceBufferPool> *ptrDestroy =
- new DESTRUCTOR_OF<LocalTraceBufferPool> (*_singleton);
+ new DESTRUCTOR_OF<LocalTraceBufferPool> (*myInstance);
+ _singleton = myInstance;
// --- start a trace Collector
exit(1); // in case assert is deactivated
}
}
+ DEVTRACE("New buffer pool: end");
}
ret = pthread_mutex_unlock(&_singletonMutex); // release lock
}
// wait until there is a free buffer in the pool
- int ret = sem_wait(&_freeBufferSemaphore);
+ int ret = -1;
+ while (ret)
+ {
+ ret = sem_wait(&_freeBufferSemaphore);
+ if (ret) perror(" LocalTraceBufferPool::insert, sem_wait");
+ }
// get the next free buffer available (mutex protected)
// wait until there is a buffer in the pool, with a message to print
- int ret = sem_wait(&_fullBufferSemaphore);
+ int ret = -1;
+ while (ret)
+ {
+ ret = sem_wait(&_fullBufferSemaphore);
+ if (ret) perror(" LocalTraceBufferPool::retrieve, sem_wait");
+ }
// get the next buffer to print
ret=pthread_mutex_destroy(&_incrementMutex);
DEVTRACE("LocalTraceBufferPool::~LocalTraceBufferPool()-end");
_singleton = 0;
- ret = pthread_mutex_unlock(&_singletonMutex); // release lock
}
+ ret = pthread_mutex_unlock(&_singletonMutex); // release lock
}
// ============================================================================
{
int ret;
ret = pthread_mutex_lock(&_incrementMutex); // lock access to counters
- pos++;
+ unsigned long mypos = ++pos;
ret = pthread_mutex_unlock(&_incrementMutex); // release lock
- return pos;
+ return mypos;
}