(file) Return to Thread.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/Thread.cpp between version 1.31 and 1.32

version 1.31, 2003/02/20 01:42:26 version 1.32, 2003/03/18 22:35:27
Line 238 
Line 238 
 { {
    PEG_METHOD_ENTER(TRC_THREAD, "ThreadPool::_loop");    PEG_METHOD_ENTER(TRC_THREAD, "ThreadPool::_loop");
  
   #if defined(PEGASUS_DEBUG)
      char trace_buf[24];
      snprintf(trace_buf, 23, "%d", (Uint32)pegasus_thread_self());
      Tracer::trace(TRC_THREAD, Tracer::LEVEL4, "ThreadPool::_loop entered by %s", trace_buf);
   #endif
   
   
    Thread *myself = (Thread *)parm;    Thread *myself = (Thread *)parm;
    if(myself == 0)    if(myself == 0)
    {    {
Line 264 
Line 271 
    }    }
    catch(IPCException &)    catch(IPCException &)
    {    {
   #if defined(PEGASUS_DEBUG)
         Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                       "%s: IPCException Caught - EXITING", trace_buf);
   #endif
       PEG_METHOD_EXIT();       PEG_METHOD_EXIT();
       myself->exit_self(0);       myself->exit_self(0);
    }    }
    catch(...)    catch(...)
    {    {
   #if defined(PEGASUS_DEBUG)
         Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                       "%s: Unknown  Exception Caught - EXITING", trace_buf);
   #endif
       PEG_METHOD_EXIT();       PEG_METHOD_EXIT();
       myself->exit_self(0);       myself->exit_self(0);
    }    }
  
    if(sleep_sem == 0 || deadlock_timer == 0)    if(sleep_sem == 0 || deadlock_timer == 0)
    {    {
   #if defined(PEGASUS_DEBUG)
         Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                       "%s: NULL Semaphore  - EXITING", trace_buf);
   #endif
       PEG_METHOD_EXIT();       PEG_METHOD_EXIT();
       throw NullPointer();       throw NullPointer();
    }    }
  
    while(pool->_dying < 1)    while(pool->_dying < 1)
    {    {
   #if defined(PEGASUS_DEBUG)
         Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                       "%s: ThreadPool::_loop - waiting on semaphore", trace_buf);
   #endif
       sleep_sem->wait();       sleep_sem->wait();
   #if defined(PEGASUS_DEBUG)
         Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                       "%s: ThreadPool::_loop - awakened from semaphore", trace_buf);
   #endif
       // when we awaken we reside on the running queue, not the pool queue       // when we awaken we reside on the running queue, not the pool queue
       if(pool->_dying > 0)       if(pool->_dying > 0)
          break;          break;
  
   
       PEGASUS_THREAD_RETURN (PEGASUS_THREAD_CDECL *_work)(void *) = 0;       PEGASUS_THREAD_RETURN (PEGASUS_THREAD_CDECL *_work)(void *) = 0;
       void *parm = 0;       void *parm = 0;
  
Line 303 
Line 330 
       }       }
       catch(IPCException &)       catch(IPCException &)
       {       {
   #if defined(PEGASUS_DEBUG)
            Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                          "%s: IPCException Caught - EXITING", trace_buf);
   #endif
          PEG_METHOD_EXIT();          PEG_METHOD_EXIT();
          myself->exit_self(0);          myself->exit_self(0);
       }       }
  
       if(_work == 0)       if(_work == 0)
       {       {
   #if defined(PEGASUS_DEBUG)
            Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                          "%s: NULL work pointer - EXITING", trace_buf);
   #endif
          PEG_METHOD_EXIT();          PEG_METHOD_EXIT();
          throw NullPointer();          throw NullPointer();
       }       }
Line 316 
Line 351 
       if(_work ==       if(_work ==
          (PEGASUS_THREAD_RETURN (PEGASUS_THREAD_CDECL *)(void *)) &_undertaker)          (PEGASUS_THREAD_RETURN (PEGASUS_THREAD_CDECL *)(void *)) &_undertaker)
       {       {
   #if defined(PEGASUS_DEBUG)
            Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                          "%s: Calling the Undertaker", trace_buf);
   #endif
          _work(parm);          _work(parm);
       }       }
  
       gettimeofday(deadlock_timer, NULL);       gettimeofday(deadlock_timer, NULL);
       try       try
       {       {
   #if defined(PEGASUS_DEBUG)
            Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                          "%s: ThreadPool::_loop - calling work routine", trace_buf);
   #endif
          _work(parm);          _work(parm);
   #if defined(PEGASUS_DEBUG)
            Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                          "%s: ThreadPool::_loop - returned from work routine", trace_buf);
   #endif
       }       }
       catch(...)       catch(...)
       {       {
   #if defined(PEGASUS_DEBUG)
            Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                          "%s: Unknown  Exception Caught - EXITING");
   #endif
          gettimeofday(deadlock_timer, NULL);          gettimeofday(deadlock_timer, NULL);
       }       }
       gettimeofday(deadlock_timer, NULL);       gettimeofday(deadlock_timer, NULL);
Line 340 
Line 391 
       }       }
       catch(IPCException &)       catch(IPCException &)
       {       {
   #if defined(PEGASUS_DEBUG)
            Tracer::trace(__FILE__, __LINE__, TRC_THREAD, Tracer::LEVEL4,
                          "%s: IPCException Caught - EXITING", trace_buf);
   #endif
          PEG_METHOD_EXIT();          PEG_METHOD_EXIT();
          myself->exit_self(0);          myself->exit_self(0);
       }       }
Line 434 
Line 489 
    // first go thread the dead q and clean it up as much as possible    // first go thread the dead q and clean it up as much as possible
    while(_dead.count() > 0)    while(_dead.count() > 0)
    {    {
   
 #if !defined(PEGASUS_PLATFORM_HPUX_ACC) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) #if !defined(PEGASUS_PLATFORM_HPUX_ACC) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)
       PEGASUS_STD(cout) << "ThreadPool:: removing and joining dead thread" << PEGASUS_STD(endl);       PEGASUS_STD(cout) << "ThreadPool:: removing and joining dead thread" << PEGASUS_STD(endl);
 #endif #endif
Line 652 
Line 708 
  
  Thread *ThreadPool::_init_thread(void) throw(IPCException)  Thread *ThreadPool::_init_thread(void) throw(IPCException)
 { {
      PEG_METHOD_ENTER(TRC_THREAD, "ThreadPool::_init_thread");
    Thread *th = (Thread *) new Thread(_loop, this, false);    Thread *th = (Thread *) new Thread(_loop, this, false);
    // allocate a sleep semaphore and pass it in the thread context    // allocate a sleep semaphore and pass it in the thread context
    // initial count is zero, loop function will sleep until    // initial count is zero, loop function will sleep until
Line 665 
Line 722 
    th->run();    th->run();
    _current_threads++;    _current_threads++;
    pegasus_yield();    pegasus_yield();
      PEG_METHOD_EXIT();
  
    return th;    return th;
 } }


Legend:
Removed from v.1.31  
changed lines
  Added in v.1.32

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2