summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2014-06-19 08:06:50 +0000
committerNanang Izzuddin <nanang@teluu.com>2014-06-19 08:06:50 +0000
commitf0d0ddae6055d905cb55b6aebe17f073c52cb383 (patch)
tree97df73f48143510537c31f6e6f8475fa393ae88d
parent727da5e28aa110f7931b696f1b1ba74e805bb9b4 (diff)
Close #1772: Fixed error handling in pjsua_create() and pjsua_init().
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4861 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index f76bc5e7..1d5eae7c 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -797,11 +797,21 @@ PJ_DEF(pj_status_t) pjsua_create(void)
/* Init PJLIB-UTIL: */
status = pjlib_util_init();
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS) {
+ pj_log_pop_indent();
+ pjsua_perror(THIS_FILE, "Failed in initializing pjlib-util", status);
+ pj_shutdown();
+ return status;
+ }
/* Init PJNATH */
status = pjnath_init();
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS) {
+ pj_log_pop_indent();
+ pjsua_perror(THIS_FILE, "Failed in initializing pjnath", status);
+ pj_shutdown();
+ return status;
+ }
/* Set default sound device ID */
pjsua_var.cap_dev = PJMEDIA_AUD_DEFAULT_CAPTURE_DEV;
@@ -816,15 +826,21 @@ PJ_DEF(pj_status_t) pjsua_create(void)
/* Create memory pool for application. */
pjsua_var.pool = pjsua_pool_create("pjsua", 1000, 1000);
+ if (pjsua_var.pool == NULL) {
+ pj_log_pop_indent();
+ status = PJ_ENOMEM;
+ pjsua_perror(THIS_FILE, "Unable to create pjsua pool", status);
+ pj_shutdown();
+ return status;
+ }
- PJ_ASSERT_RETURN(pjsua_var.pool, PJ_ENOMEM);
-
/* Create mutex */
status = pj_mutex_create_recursive(pjsua_var.pool, "pjsua",
&pjsua_var.mutex);
if (status != PJ_SUCCESS) {
pj_log_pop_indent();
pjsua_perror(THIS_FILE, "Unable to create mutex", status);
+ pjsua_destroy();
return status;
}
@@ -834,7 +850,12 @@ PJ_DEF(pj_status_t) pjsua_create(void)
status = pjsip_endpt_create(&pjsua_var.cp.factory,
pj_gethostname()->ptr,
&pjsua_var.endpt);
- PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ if (status != PJ_SUCCESS) {
+ pj_log_pop_indent();
+ pjsua_perror(THIS_FILE, "Unable to create endpoint", status);
+ pjsua_destroy();
+ return status;
+ }
/* Init timer entry list */
pj_list_init(&pjsua_var.timer_list);
@@ -845,6 +866,7 @@ PJ_DEF(pj_status_t) pjsua_create(void)
if (status != PJ_SUCCESS) {
pj_log_pop_indent();
pjsua_perror(THIS_FILE, "Unable to create mutex", status);
+ pjsua_destroy();
return status;
}
@@ -1125,7 +1147,6 @@ PJ_DEF(pj_status_t) pjsua_init( const pjsua_config *ua_cfg,
return PJ_SUCCESS;
on_error:
- pjsua_destroy();
pj_log_pop_indent();
return status;
}