version 1.100, 2007/08/03 01:07:21
|
version 1.100.2.2, 2008/07/17 19:46:18
|
|
|
| |
extern "C" void *_start_wrapper(void *arg_) | extern "C" void *_start_wrapper(void *arg_) |
{ | { |
StartWrapperArg *arg = (StartWrapperArg *) arg_; |
// Clean up dynamic memory now to prevent a leak if the thread is canceled. |
|
StartWrapperArg arg; |
|
arg.start = ((StartWrapperArg *) arg_)->start; |
|
arg.arg = ((StartWrapperArg *) arg_)->arg; |
|
delete (StartWrapperArg *) arg_; |
| |
void *return_value = (*arg->start) (arg->arg); |
// establish cancelability of the thread |
delete arg; |
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); |
|
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL); |
|
|
|
void *return_value = (*arg.start) (arg.arg); |
| |
return return_value; | return return_value; |
} | } |
|
|
arg->start = _start; | arg->start = _start; |
arg->arg = this; | arg->arg = this; |
| |
Threads::Type type = _is_detached ? Threads::DETACHED : Threads::JOINABLE; |
Threads::Type type = |
|
_is_detached ? Threads::THREADS_DETACHED : Threads::THREADS_JOINABLE; |
int rc = Threads::create(_handle.thid, type, _start_wrapper, arg); | int rc = Threads::create(_handle.thid, type, _start_wrapper, arg); |
| |
// On Linux distributions released prior 2005, the implementation of | // On Linux distributions released prior 2005, the implementation of |