diff options
-rw-r--r-- | threadproc/beos/thread.c | 20 | ||||
-rw-r--r-- | threadproc/unix/thread.c | 14 | ||||
-rw-r--r-- | threadproc/win32/thread.c | 1 |
3 files changed, 15 insertions, 20 deletions
diff --git a/threadproc/beos/thread.c b/threadproc/beos/thread.c index 8dd95ea8b..988f8f4ff 100644 --- a/threadproc/beos/thread.c +++ b/threadproc/beos/thread.c @@ -161,21 +161,19 @@ APR_DECLARE(apr_status_t) apr_thread_join(apr_status_t *retval, apr_thread_t *th } ret = wait_for_thread(thd->td, &rv); - if (ret == B_NO_ERROR) { - *retval = rv; - return APR_SUCCESS; - } - else { + if (ret != B_NO_ERROR) { /* if we've missed the thread's death, did we set an exit value prior * to it's demise? If we did return that. */ - if (thd->exitval != -1) { - *retval = thd->exitval; - apr_pool_destroy(thd->pool); - return APR_SUCCESS; - } else - return ret; + if (thd->exitval == -1) { + return errno; + } + rv = thd->exitval; } + + *retval = rv; + apr_pool_destroy(thd->pool); + return APR_SUCCESS; } APR_DECLARE(apr_status_t) apr_thread_detach(apr_thread_t *thd) diff --git a/threadproc/unix/thread.c b/threadproc/unix/thread.c index 3b6ef2809..d1ae872c6 100644 --- a/threadproc/unix/thread.c +++ b/threadproc/unix/thread.c @@ -235,24 +235,22 @@ APR_DECLARE(apr_status_t) apr_thread_join(apr_status_t *retval, apr_thread_t *thd) { apr_status_t stat; - apr_status_t *thread_stat; + void *thread_stat; if (thd->detached) { return APR_EINVAL; } - if ((stat = pthread_join(*thd->td,(void *)&thread_stat)) == 0) { - *retval = thd->exitval; - apr_pool_destroy(thd->pool); - return APR_SUCCESS; - } - else { + if ((stat = pthread_join(*thd->td, &thread_stat))) { #ifdef HAVE_ZOS_PTHREADS stat = errno; #endif - return stat; } + + *retval = thd->exitval; + apr_pool_destroy(thd->pool); + return APR_SUCCESS; } APR_DECLARE(apr_status_t) apr_thread_detach(apr_thread_t *thd) diff --git a/threadproc/win32/thread.c b/threadproc/win32/thread.c index 02956c59f..569268cd1 100644 --- a/threadproc/win32/thread.c +++ b/threadproc/win32/thread.c @@ -181,7 +181,6 @@ APR_DECLARE(apr_status_t) apr_thread_join(apr_status_t *retval, if (rv == APR_SUCCESS) { CloseHandle(thd->td); apr_pool_destroy(thd->pool); - thd->td = NULL; } return rv; |