From f0d0ddae6055d905cb55b6aebe17f073c52cb383 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Thu, 19 Jun 2014 08:06:50 +0000 Subject: 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 --- pjsip/src/pjsua-lib/pjsua_core.c | 33 +++++++++++++++++++++++++++------ 1 file 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; } -- cgit v1.2.3