summaryrefslogtreecommitdiff
path: root/pjlib
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2015-03-22 07:50:28 +0000
committerLiong Sauw Ming <ming@teluu.com>2015-03-22 07:50:28 +0000
commite346ff50cd4cbc37c5961c2c2f36315f06c3525e (patch)
treeff5216612b3f2ee05a1ef7decacdf359933bd8eb /pjlib
parent17a5d263408c7e694f71453d6c420da44e6a3d88 (diff)
Fixed #1827: Video port's clock thread may get stuck during format change event
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5012 74dad513-b988-da41-8d7b-12977e46ad98
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);