if (_reaperThread == 0)
{
_reaperThread = new Thread(_reaper, NULL, false);
- ThreadStatus rtn = PEGASUS_THREAD_OK;
- while ((rtn = _reaperThread->run()) != PEGASUS_THREAD_OK)
+
+ if (_reaperThread->run() != PEGASUS_THREAD_OK)
{
- if (rtn == PEGASUS_THREAD_INSUFFICIENT_RESOURCES)
- Threads::yield();
- else
- {
- PEG_TRACE_CSTRING(
- TRC_PROVIDERMANAGER,
- Tracer::LEVEL1,
- "Could not allocate thread to take care of deleting "
- "user threads. ");
- delete _reaperThread; _reaperThread = 0;
- PEG_METHOD_EXIT();
- return;
- }
+ PEG_TRACE_CSTRING(
+ TRC_PROVIDERMANAGER,
+ Tracer::LEVEL1,
+ "Could not allocate thread to take care of deleting "
+ "user threads, will be cleaned up later.");
+
+ delete _reaperThread;
+ _reaperThread = 0;
+ PEG_METHOD_EXIT();
+ return;
}
}
// Wake up the reaper.
broker->provider->addThreadToWatch(t);
data.release();
- ThreadStatus rtn = PEGASUS_THREAD_OK;
- while ((rtn = t->run()) != PEGASUS_THREAD_OK)
+ if (t->run() != PEGASUS_THREAD_OK)
{
- if (rtn == PEGASUS_THREAD_INSUFFICIENT_RESOURCES)
- {
- Threads::yield();
- }
- else
- {
- PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
- "Could not allocate provider thread (%p) for %s provider.",
- t, (const char *)broker->name.getCString()));
- broker->provider->removeThreadFromWatch(t);
- delete t;
- t = 0;
- break;
- }
+ PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
+ "Could not allocate provider thread (%p) for %s provider.",
+ t, (const char *)broker->name.getCString()));
+ broker->provider->removeThreadFromWatch(t);
+ t = NULL;
}
- if (rtn == PEGASUS_THREAD_OK)
+ else
{
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
"Started provider thread (%p) for %s.",