summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2010-09-07 05:12:02 +0000
committerLiong Sauw Ming <ming@teluu.com>2010-09-07 05:12:02 +0000
commitc7f48f004e14c0be8b4c5fcd82c6a5ccc64c170a (patch)
tree4ad4e2141c1eab80a75e219cd380b15e29d954e2
parent72549c62dbda8bcdc5afab24c468f701728fb3d7 (diff)
Fixed #1117: Configurable PJSUA-LIB lock timeout
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3304 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjsip/include/pjsua-lib/pjsua.h9
-rw-r--r--pjsip/src/pjsua-lib/pjsua_call.c17
2 files changed, 24 insertions, 2 deletions
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index 7510a4fc..b74a209e 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -316,6 +316,15 @@ typedef struct pjsua_msg_data pjsua_msg_data;
# define PJSUA_ADD_ICE_TAGS 1
#endif
+/**
+ * Timeout value used to acquire mutex lock on a particular call.
+ *
+ * Default: 2000 ms
+ */
+#ifndef PJSUA_ACQUIRE_CALL_TIMEOUT
+# define PJSUA_ACQUIRE_CALL_TIMEOUT 2000
+#endif
+
/**
* Logging configuration, which can be (optionally) specified when calling
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c
index d390009e..ed5eb100 100644
--- a/pjsip/src/pjsua-lib/pjsua_call.c
+++ b/pjsip/src/pjsua-lib/pjsua_call.c
@@ -1130,13 +1130,26 @@ pj_status_t acquire_call(const char *title,
pjsua_call **p_call,
pjsip_dialog **p_dlg)
{
- enum { MAX_RETRY=50 };
unsigned retry;
pjsua_call *call = NULL;
pj_bool_t has_pjsua_lock = PJ_FALSE;
pj_status_t status = PJ_SUCCESS;
+ pj_time_val time_start, timeout;
- for (retry=0; retry<MAX_RETRY; ++retry) {
+ pj_gettimeofday(&time_start);
+ timeout.msec = PJSUA_ACQUIRE_CALL_TIMEOUT;
+ pj_time_val_normalize(&timeout);
+
+ for (retry=0; ; ++retry) {
+
+ if (retry % 10 == 9) {
+ pj_time_val dtime;
+
+ pj_gettimeofday(&dtime);
+ PJ_TIME_VAL_SUB(dtime, time_start);
+ if (!PJ_TIME_VAL_LT(dtime, timeout))
+ break;
+ }
has_pjsua_lock = PJ_FALSE;