(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.97 and 1.101

version 1.97, 2006/10/31 18:23:45 version 1.101, 2007/10/17 20:37:27
Line 80 
Line 80 
 #endif #endif
 } }
  
 Boolean Thread::is_cancelled(void)  Boolean Thread::is_cancelled()
 { {
     return _cancelled;     return _cancelled;
 } }
Line 114 
Line 114 
     Threads::sleep(msec);     Threads::sleep(msec);
 } }
  
 void Thread::join(void)  void Thread::join()
 { {
     if (!_is_detached && !Threads::null(_handle.thid))     if (!_is_detached && !Threads::null(_handle.thid))
         pthread_join(_handle.thid.thread, &_exit_code);         pthread_join(_handle.thid.thread, &_exit_code);
Line 122 
Line 122 
     Threads::clear(_handle.thid);     Threads::clear(_handle.thid);
 } }
  
 void Thread::thread_init(void)  void Thread::thread_init()
 { {
 #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)
     pthread_setintr(PTHREAD_INTR_ENABLE);     pthread_setintr(PTHREAD_INTR_ENABLE);
Line 134 
Line 134 
     _cancel_enabled = true;     _cancel_enabled = true;
 } }
  
 void Thread::detach(void)  void Thread::detach()
 { {
     _is_detached = true;     _is_detached = true;
 #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)
Line 177 
Line 177 
     return PEGASUS_THREAD_OK;     return PEGASUS_THREAD_OK;
 } }
  
 static sigset_t *block_signal_mask(sigset_t * sig)  Thread::Thread(
 {      ThreadReturnType(PEGASUS_THREAD_CDECL* start) (void*),
     sigemptyset(sig);      void* parameter,
     // should not be used for main()      Boolean detached)
     sigaddset(sig, SIGHUP);      : _is_detached(detached),
     sigaddset(sig, SIGINT);  
     // maybe useless, since KILL can't be blocked according to POSIX  
     sigaddset(sig, SIGKILL);  
   
     sigaddset(sig, SIGABRT);  
     sigaddset(sig, SIGALRM);  
     sigaddset(sig, SIGPIPE);  
   
   
 // Note: older versions of the linux pthreads library use SIGUSR1 and SIGUSR2  
 // internally to stop and start threads that are blocking, the newer ones  
 // implement this through the kernel's real time signals  
 // since SIGSTOP/CONT can handle suspend()/resume() on Linux  
 // block them  
 // #if defined(PEGASUS_PLATFORM_LINUX_IX86_GNU)  
 //     sigaddset(sig, SIGUSR1);  
 //     sigaddset(sig, SIGUSR2);  
 // #endif  
 #if defined (PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined (PEGASUS_OS_VMS)  
     sigprocmask(SIG_BLOCK, sig, NULL);  
 #else  
     pthread_sigmask(SIG_BLOCK, sig, NULL);  
 #endif  
     return sig;  
 }  
   
 Thread::Thread(ThreadReturnType(PEGASUS_THREAD_CDECL * start) (void *), void *parameter, Boolean detached):_is_detached(detached),  
 _cancel_enabled(true), _cancel_enabled(true),
 _cancelled(false), _cancelled(false),
 _start(start), _cleanup(), _tsd(), _thread_parm(parameter), _exit_code(0)        _start(start),
         _cleanup(),
         _tsd(),
         _thread_parm(parameter),
         _exit_code(0)
 { {
     Threads::clear(_handle.thid);     Threads::clear(_handle.thid);
 } }
Line 239 
Line 216 
  
 #if defined(PEGASUS_HAVE_WINDOWS_THREADS) #if defined(PEGASUS_HAVE_WINDOWS_THREADS)
  
 ThreadStatus Thread::run(void)  ThreadStatus Thread::run()
 { {
     // Note: A Win32 thread ID is not the same thing as a pthread ID.     // Note: A Win32 thread ID is not the same thing as a pthread ID.
     // Win32 threads have both a thread ID and a handle.  The handle     // Win32 threads have both a thread ID and a handle.  The handle
Line 266 
Line 243 
     return PEGASUS_THREAD_OK;     return PEGASUS_THREAD_OK;
 } }
  
 void Thread::cancel(void)  void Thread::cancel()
 { {
     _cancelled = true;     _cancelled = true;
 } }
  
 void Thread::test_cancel(void)  void Thread::test_cancel()
 { {
     if (_cancel_enabled && _cancelled)     if (_cancel_enabled && _cancelled)
     {     {
Line 279 
Line 256 
     }     }
 } }
  
 Boolean Thread::is_cancelled(void)  Boolean Thread::is_cancelled()
 { {
     return _cancelled;     return _cancelled;
 } }
  
 void Thread::thread_switch(void)  void Thread::thread_switch()
 { {
     Sleep(0);     Sleep(0);
 } }
Line 294 
Line 271 
     Sleep(milliseconds);     Sleep(milliseconds);
 } }
  
 void Thread::join(void)  void Thread::join()
 { {
     if (!Threads::null(_handle.thid))     if (!Threads::null(_handle.thid))
     {     {
Line 328 
Line 305 
     }     }
 } }
  
 void Thread::thread_init(void)  void Thread::thread_init()
 { {
     _cancel_enabled = true;     _cancel_enabled = true;
 } }
  
 void Thread::detach(void)  void Thread::detach()
 { {
     _is_detached = true;     _is_detached = true;
 } }
Line 416 
Line 393 
 } }
  
  
 //thread_data *Thread::put_tsd(const Sint8 *key, void (*delete_func)(void *), Uint32 size, void *value)  
   
   
 void Thread::exit_self(ThreadReturnType exit_code) void Thread::exit_self(ThreadReturnType exit_code)
 { {
 #ifndef PEGASUS_PLATFORM_AIX_RS_IBMCXX  #if !defined(PEGASUS_PLATFORM_AIX_RS_IBMCXX) \
       && !defined(PEGASUS_PLATFORM_PASE_ISERIES_IBMCXX)
     Threads::exit(exit_code);     Threads::exit(exit_code);
 #else #else
     // execute the cleanup stack and then return     // execute the cleanup stack and then return
Line 450 
Line 425 
     {     {
         if (Thread::_key_error)         if (Thread::_key_error)
         {         {
             Tracer::trace(TRC_THREAD, Tracer::LEVEL4,              PEG_TRACE_CSTRING(TRC_THREAD, Tracer::LEVEL4,
                           "Thread: ERROR - thread key error");                           "Thread: ERROR - thread key error");
             return -1;             return -1;
         }         }
  
         if (TSDKey::create(&Thread::_platform_thread_key) == 0)         if (TSDKey::create(&Thread::_platform_thread_key) == 0)
         {         {
             Tracer::trace(TRC_THREAD, Tracer::LEVEL4,              PEG_TRACE_CSTRING(TRC_THREAD, Tracer::LEVEL4,
                           "Thread: able to create a thread key");                           "Thread: able to create a thread key");
             Thread::_key_initialized = true;             Thread::_key_initialized = true;
         }         }
         else         else
         {         {
             Tracer::trace(TRC_THREAD, Tracer::LEVEL4,              PEG_TRACE_CSTRING(TRC_THREAD, Tracer::LEVEL4,
                           "Thread: ERROR - unable to create a thread key");                           "Thread: ERROR - unable to create a thread key");
             Thread::_key_error = true;             Thread::_key_error = true;
             return -1;             return -1;
Line 494 
Line 469 
             set_thread_specific(Thread::_platform_thread_key,             set_thread_specific(Thread::_platform_thread_key,
                                 (void *) thrd) == 0)                                 (void *) thrd) == 0)
         {         {
             Tracer::trace(TRC_THREAD, Tracer::LEVEL4,              PEG_TRACE_CSTRING(TRC_THREAD, Tracer::LEVEL4,
                 "Successful set Thread * into thread specific storage");                 "Successful set Thread * into thread specific storage");
         }         }
         else         else
         {         {
             Tracer::trace(TRC_THREAD, Tracer::LEVEL4,              PEG_TRACE_CSTRING(TRC_THREAD, Tracer::LEVEL4,
                 "ERROR: error setting Thread * into thread specific storage");                 "ERROR: error setting Thread * into thread specific storage");
         }         }
     }     }
Line 520 
Line 495 
     return acceptLangs;     return acceptLangs;
 } }
  
 void Thread::setLanguages(AcceptLanguageList * langs)   // l10n  void Thread::setLanguages(AcceptLanguageList * langs)
 { {
     PEG_METHOD_ENTER(TRC_THREAD, "Thread::setLanguages");     PEG_METHOD_ENTER(TRC_THREAD, "Thread::setLanguages");
  
Line 536 
Line 511 
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
 } }
  
 void Thread::clearLanguages()   // l10n  void Thread::clearLanguages()
 { {
     PEG_METHOD_ENTER(TRC_THREAD, "Thread::clearLanguages");     PEG_METHOD_ENTER(TRC_THREAD, "Thread::clearLanguages");
  


Legend:
Removed from v.1.97  
changed lines
  Added in v.1.101

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2