Changeset 7461
- Timestamp:
- 09/24/07 15:18:27
- Files:
-
- OpenThreads/trunk/include/OpenThreads/Thread (modified) (2 diffs)
- OpenThreads/trunk/src/OpenThreads/pthreads/PThread.c++ (modified) (5 diffs)
- OpenThreads/trunk/src/OpenThreads/sproc/SprocThread.c++ (modified) (5 diffs)
- OpenThreads/trunk/src/OpenThreads/win32/Win32Thread.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
OpenThreads/trunk/include/OpenThreads/Thread
r6096 r7461 23 23 #include <sys/types.h> 24 24 25 #include <OpenThreads/ Exports>25 #include <OpenThreads/Mutex> 26 26 27 27 namespace OpenThreads { … … 374 374 void * _prvData; 375 375 376 Mutex _prvDataMutex; 377 376 378 /** 377 379 * Master thread's priority, set by Thread::Init. OpenThreads/trunk/src/OpenThreads/pthreads/PThread.c++
r7376 r7461 39 39 40 40 #include <OpenThreads/Thread> 41 #include <OpenThreads/ScopedLock> 41 42 #include "PThreadPrivateData.h" 42 43 … … 110 111 111 112 Thread *thread = static_cast<Thread *>(data); 113 114 ScopedLock<Mutex> lock(thread->_prvDataMutex); 115 112 116 PThreadPrivateData *pd = 113 117 static_cast<PThreadPrivateData *>(thread->_prvData); 118 119 if (thread->_prvData==0) return 0; 114 120 115 121 if (pd->cpunum>=0) … … 390 396 // Use: public. 391 397 // 392 Thread::~Thread() { 398 Thread::~Thread() 399 { 400 ScopedLock<Mutex> lock(_prvDataMutex); 393 401 394 402 PThreadPrivateData *pd = static_cast<PThreadPrivateData *>(_prvData); 395 403 396 if(pd->isRunning) {397 404 if(pd->isRunning) 405 { 398 406 std::cout<<"Error: Thread "<<this<<" still running in destructor"<<std::endl; 399 407 … … 405 413 406 414 delete pd; 407 408 } 409 410 Thread *Thread::CurrentThread() { 415 416 _prvData = 0; 417 418 } 419 420 Thread *Thread::CurrentThread() 421 { 411 422 412 423 Thread *thread = … … 640 651 // Use: public 641 652 // 642 int Thread::startThread() { return start(); } 653 int Thread::startThread() 654 { 655 ScopedLock<Mutex> lock(_prvDataMutex); 656 if (_prvData) return start(); 657 else return 0; 658 } 643 659 644 660 //----------------------------------------------------------------------------- OpenThreads/trunk/src/OpenThreads/sproc/SprocThread.c++
r7401 r7461 128 128 // standard start routine. 129 129 // 130 void ThreadPrivateActions::StartThread(void *data) { 130 void ThreadPrivateActions::StartThread(void *data) 131 { 131 132 132 133 Thread *thread = static_cast<Thread *>(data); 134 135 ScopedLock<Mutex> lock(thread->_prvDataMutex); 136 137 if (thread->_prvData==0) return; 133 138 134 139 AddThread(thread); … … 354 359 // Use: public. 355 360 // 356 Thread::~Thread() { 361 Thread::~Thread() 362 { 363 ScopedLock<Mutex> lock(_prvDataMutex); 357 364 358 365 DPRINTF(("(SPROC THREAD) %s:%d, In OpenThreads::Thread destructor\n", … … 362 369 static_cast<SprocThreadPrivateData *>(_prvData); 363 370 364 if(pd->isRunning) { 371 if(pd->isRunning) 372 { 365 373 366 374 DPRINTF(("(SPROC THREAD) %s:%d, about to kill OpenThreads::Thread\n", … … 386 394 delete pd; 387 395 396 _prvData = 0; 388 397 } 389 398 … … 504 513 // Use: public 505 514 // 506 int Thread::startThread() { return start(); } 515 int Thread::startThread() 516 { 517 ScopedLock<Mutex> lock(_prvDataMutex); 518 if (_prvData) return start(); 519 else return 0; 520 } 507 521 508 522 //----------------------------------------------------------------------------- OpenThreads/trunk/src/OpenThreads/win32/Win32Thread.cpp
r7330 r7461 92 92 93 93 Thread *thread = static_cast<Thread *>(data); 94 95 ScopedLock<Mutex> lock(thread->_prvDataMutex); 96 94 97 Win32ThreadPrivateData *pd = 95 98 static_cast<Win32ThreadPrivateData *>(thread->_prvData); 99 100 if (thread->_prvData==0) return 0; 96 101 97 102 TlsSetValue(Win32ThreadPrivateData::TLS.ID ,data); … … 253 258 // Use: public. 254 259 // 255 Thread::~Thread() { 260 Thread::~Thread() 261 { 262 ScopedLock<Mutex> lock(_prvDataMutex); 263 256 264 Win32ThreadPrivateData *pd = static_cast<Win32ThreadPrivateData *>(_prvData); 257 if(pd->isRunning) { 265 266 if(pd->isRunning) 267 { 258 268 std::cout<<"Error: Thread "<<this<<" still running in destructor"<<std::endl; 259 269 pd->cancelMode = 0; 260 270 cancel(); 261 271 } 272 262 273 delete pd; 274 275 _prvData = 0; 263 276 } 264 277 //----------------------------------------------------------------------------- … … 335 348 336 349 int Thread::startThread() 337 { return start(); } 350 { 351 ScopedLock<Mutex> lock(_prvDataMutex); 352 if (_prvData) return start(); 353 else return 0; 354 } 338 355 339 356 //-----------------------------------------------------------------------------
