summaryrefslogtreecommitdiff
path: root/pjlib
diff options
context:
space:
mode:
Diffstat (limited to 'pjlib')
-rw-r--r--pjlib/include/pj/os.h4
-rw-r--r--pjlib/src/pj/os_core_unix.c3
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);