Changeset 7470
- Timestamp:
- 09/25/07 11:45:44
- Files:
-
- OpenThreads/trunk/include/OpenThreads/Thread (modified) (1 diff)
- OpenThreads/trunk/src/OpenThreads/pthreads/PThread.c++ (modified) (7 diffs)
- OpenThreads/trunk/src/OpenThreads/pthreads/PThreadPrivateData.h (modified) (3 diffs)
- OpenThreads/trunk/src/OpenThreads/sproc/SprocThread.c++ (modified) (7 diffs)
- OpenThreads/trunk/src/OpenThreads/sproc/SprocThreadPrivateData.h (modified) (2 diffs)
- OpenThreads/trunk/src/OpenThreads/win32/Win32Thread.cpp (modified) (6 diffs)
- OpenThreads/trunk/src/OpenThreads/win32/Win32ThreadPrivateData.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
OpenThreads/trunk/include/OpenThreads/Thread
r7461 r7470 374 374 void * _prvData; 375 375 376 Mutex _prvDataMutex;377 378 376 /** 379 377 * Master thread's priority, set by Thread::Init. OpenThreads/trunk/src/OpenThreads/pthreads/PThread.c++
r7461 r7470 39 39 40 40 #include <OpenThreads/Thread> 41 #include <OpenThreads/ScopedLock>42 41 #include "PThreadPrivateData.h" 43 42 … … 111 110 112 111 Thread *thread = static_cast<Thread *>(data); 113 114 ScopedLock<Mutex> lock(thread->_prvDataMutex); 115 112 116 113 PThreadPrivateData *pd = 117 114 static_cast<PThreadPrivateData *>(thread->_prvData); 118 115 119 if (thread->_prvData==0) return 0;120 116 121 117 if (pd->cpunum>=0) … … 164 160 165 161 pd->isRunning = true; 162 163 // release the thread that created this thread. 164 pd->threadStartedBlock.release(); 165 166 166 thread->run(); 167 167 168 pd->isRunning = false; 168 169 … … 398 399 Thread::~Thread() 399 400 { 400 ScopedLock<Mutex> lock(_prvDataMutex);401 402 401 PThreadPrivateData *pd = static_cast<PThreadPrivateData *>(_prvData); 403 402 … … 415 414 416 415 _prvData = 0; 417 418 416 } 419 417 … … 631 629 } 632 630 631 pd->threadStartedBlock.reset(); 632 633 633 status = pthread_create(&(pd->tid), &thread_attr, 634 634 ThreadPrivateActions::StartThread, 635 635 static_cast<void *>(this)); 636 637 // wait till the thread has actually started. 638 pd->threadStartedBlock.block(); 636 639 637 640 if(status != 0) { … … 653 656 int Thread::startThread() 654 657 { 655 ScopedLock<Mutex> lock(_prvDataMutex);656 658 if (_prvData) return start(); 657 659 else return 0; OpenThreads/trunk/src/OpenThreads/pthreads/PThreadPrivateData.h
r6584 r7470 22 22 #include <pthread.h> 23 23 #include <OpenThreads/Thread> 24 #include <OpenThreads/Block> 24 25 25 26 namespace OpenThreads { … … 50 51 volatile bool isRunning; 51 52 53 Block threadStartedBlock; 54 52 55 volatile bool isCanceled; 53 56 … … 63 66 64 67 volatile int cpunum; 68 65 69 66 70 static int nextId; OpenThreads/trunk/src/OpenThreads/sproc/SprocThread.c++
r7468 r7470 28 28 #include <list> 29 29 #include <OpenThreads/Thread> 30 #include <OpenThreads/ScopedLock>31 30 #include "SprocMutexPrivateData.h" 32 31 #include "SprocThreadPrivateData.h" … … 134 133 Thread *thread = static_cast<Thread *>(data); 135 134 136 ScopedLock<Mutex> lock(thread->_prvDataMutex);137 138 135 if (thread->_prvData==0) return; 139 136 … … 161 158 162 159 pd->isRunning = true; 160 161 // release the thread that created this thread. 162 pd->threadStartedBlock.release(); 163 163 164 thread->run(); 165 164 166 pd->isRunning = false; 165 167 … … 362 364 Thread::~Thread() 363 365 { 364 ScopedLock<Mutex> lock(_prvDataMutex);365 366 366 DPRINTF(("(SPROC THREAD) %s:%d, In OpenThreads::Thread destructor\n", 367 367 __FILE__, __LINE__)); … … 486 486 static_cast<SprocThreadPrivateData *> (_prvData); 487 487 488 pd->threadStartedBlock.reset(); 489 488 490 int pid = sproc(ThreadPrivateActions::StartThread, 489 491 PR_SALL, … … 504 506 pd->pid = pid; 505 507 pd->idSet = true; 508 509 // wait till the thread has actually started. 510 pd->threadStartedBlock.block(); 511 506 512 return 0; 507 513 … … 516 522 int Thread::startThread() 517 523 { 518 ScopedLock<Mutex> lock(_prvDataMutex);519 524 if (_prvData) return start(); 520 525 else return 0; OpenThreads/trunk/src/OpenThreads/sproc/SprocThreadPrivateData.h
r6584 r7470 25 25 26 26 #include <OpenThreads/Thread> 27 #include <OpenThreads/Block> 27 28 #include "SprocThreadPrivateActions.h" 28 29 … … 53 54 volatile bool isRunning; 54 55 56 Block threadStartedBlock; 57 55 58 volatile bool isCanceled; 56 59 OpenThreads/trunk/src/OpenThreads/win32/Win32Thread.cpp
r7468 r7470 21 21 #include <process.h> 22 22 23 #include <OpenThreads/ScopedLock>24 25 23 #if defined(_MSC_VER) && (_MSC_VER < 1300) 26 24 #ifdef __SGI_STL … … 95 93 Thread *thread = static_cast<Thread *>(data); 96 94 97 ScopedLock<Mutex> lock(thread->_prvDataMutex);98 99 95 Win32ThreadPrivateData *pd = 100 96 static_cast<Win32ThreadPrivateData *>(thread->_prvData); … … 109 105 110 106 pd->isRunning = true; 107 108 // release the thread that created this thread. 109 pd->threadStartedBlock.release(); 111 110 112 111 try{ … … 262 261 Thread::~Thread() 263 262 { 264 ScopedLock<Mutex> lock(_prvDataMutex);265 266 263 Win32ThreadPrivateData *pd = static_cast<Win32ThreadPrivateData *>(_prvData); 267 264 … … 336 333 // pd->stackSizeLocked = true; 337 334 unsigned int ID; 335 336 pd->threadStartedBlock.reset(); 338 337 339 338 pd->tid.set( (void*)_beginthreadex(NULL,pd->stackSize,ThreadPrivateActions::StartThread,static_cast<void *>(this),0,&ID)); 340 339 341 340 pd->uniqueId = (int)ID; 341 342 // wait till the thread has actually started. 343 pd->threadStartedBlock.block(); 342 344 343 345 if(!pd->tid) { … … 351 353 int Thread::startThread() 352 354 { 353 ScopedLock<Mutex> lock(_prvDataMutex);354 355 if (_prvData) return start(); 355 356 else return 0; OpenThreads/trunk/src/OpenThreads/win32/Win32ThreadPrivateData.h
r6584 r7470 25 25 26 26 #include <OpenThreads/Thread> 27 #include <OpenThreads/Block> 27 28 #include "HandleHolder.h" 28 29 … … 48 49 bool isRunning; 49 50 50 int cancelMode; // 0 - deffered (default) 1-asynch 2-disabled 51 Block threadStartedBlock; 52 53 int cancelMode; // 0 - deffered (default) 1-asynch 2-disabled 51 54 52 55 bool detached;
