diff options
Diffstat (limited to 'pjlib')
-rw-r--r-- | pjlib/include/pj/os.h | 4 | ||||
-rw-r--r-- | pjlib/src/pj/os_core_unix.c | 3 |
2 files changed, 6 insertions, 1 deletions
diff --git a/pjlib/include/pj/os.h b/pjlib/include/pj/os.h index 8cf9bcd9..8d8e602b 100644 --- a/pjlib/include/pj/os.h +++ b/pjlib/include/pj/os.h @@ -311,8 +311,10 @@ PJ_DECL(pj_thread_t*) pj_thread_this(void); /** * Join thread, and block the caller thread until the specified thread exits. + * If it is called from within the thread itself, it will return immediately + * with failure status. * If the specified thread has already been dead, or it does not exist, - * the function will return immediately with successfull status. + * the function will return immediately with successful status. * * @param thread The thread handle. * diff --git a/pjlib/src/pj/os_core_unix.c b/pjlib/src/pj/os_core_unix.c index 8ec0cdb7..1a9fedd0 100644 --- a/pjlib/src/pj/os_core_unix.c +++ b/pjlib/src/pj/os_core_unix.c @@ -717,6 +717,9 @@ PJ_DEF(pj_status_t) pj_thread_join(pj_thread_t *p) PJ_CHECK_STACK(); + if (p == pj_thread_this()) + return PJ_ECANCELLED; + PJ_LOG(6, (pj_thread_this()->obj_name, "Joining thread %s", p->obj_name)); result = pthread_join( rec->thread, &ret); |