diff --git a/pjmedia/src/pjmedia-codec/and_aud_mediacodec.cpp b/pjmedia/src/pjmedia-codec/and_aud_mediacodec.cpp index 2793c6af70..db14b9b456 100644 --- a/pjmedia/src/pjmedia-codec/and_aud_mediacodec.cpp +++ b/pjmedia/src/pjmedia-codec/and_aud_mediacodec.cpp @@ -754,6 +754,7 @@ static pj_status_t and_media_alloc_codec(pjmedia_codec_factory *factory, } if (idx == -1) { *p_codec = NULL; + pj_mutex_unlock(and_media_factory.mutex); return PJMEDIA_CODEC_EFAILED; } diff --git a/pjmedia/src/pjmedia-codec/ipp_codecs.c b/pjmedia/src/pjmedia-codec/ipp_codecs.c index ea5789da37..ccedc9249c 100644 --- a/pjmedia/src/pjmedia-codec/ipp_codecs.c +++ b/pjmedia/src/pjmedia-codec/ipp_codecs.c @@ -939,6 +939,7 @@ static pj_status_t ipp_alloc_codec( pjmedia_codec_factory *factory, } if (idx == -1) { *p_codec = NULL; + pj_mutex_unlock(ipp_factory.mutex); return PJMEDIA_CODEC_EFAILED; } diff --git a/pjmedia/src/pjmedia-codec/opus.c b/pjmedia/src/pjmedia-codec/opus.c index d0db1e6fc3..b3ff74ab8e 100644 --- a/pjmedia/src/pjmedia-codec/opus.c +++ b/pjmedia/src/pjmedia-codec/opus.c @@ -723,6 +723,7 @@ static pj_status_t codec_open( pjmedia_codec *codec, OPUS_APPLICATION_VOIP); if (err != OPUS_OK) { PJ_LOG(2, (THIS_FILE, "Unable to create encoder")); + pj_mutex_unlock (opus_data->mutex); return PJMEDIA_CODEC_EFAILED; } @@ -767,6 +768,7 @@ static pj_status_t codec_open( pjmedia_codec *codec, attr->info.channel_cnt); if (err != OPUS_OK) { PJ_LOG(2, (THIS_FILE, "Unable to initialize decoder")); + pj_mutex_unlock (opus_data->mutex); return PJMEDIA_CODEC_EFAILED; } diff --git a/pjmedia/src/pjmedia-codec/passthrough.c b/pjmedia/src/pjmedia-codec/passthrough.c index 551a848305..4eeb35177b 100644 --- a/pjmedia/src/pjmedia-codec/passthrough.c +++ b/pjmedia/src/pjmedia-codec/passthrough.c @@ -625,6 +625,7 @@ static pj_status_t alloc_codec( pjmedia_codec_factory *factory, } if (idx == -1) { *p_codec = NULL; + pj_mutex_unlock(codec_factory.mutex); return PJMEDIA_CODEC_EUNSUP; } diff --git a/pjmedia/src/pjmedia-codec/speex_codec.c b/pjmedia/src/pjmedia-codec/speex_codec.c index 9a35b3767b..113e84f9cd 100644 --- a/pjmedia/src/pjmedia-codec/speex_codec.c +++ b/pjmedia/src/pjmedia-codec/speex_codec.c @@ -379,6 +379,7 @@ PJ_DEF(pj_status_t) pjmedia_codec_speex_deinit(void) if (!codec_mgr) { pj_pool_release(spx_factory.pool); spx_factory.pool = NULL; + pj_mutex_unlock(spx_factory.mutex); return PJ_EINVALIDOP; } diff --git a/pjmedia/src/pjmedia/vid_conf.c b/pjmedia/src/pjmedia/vid_conf.c index 6fa5348507..bf46ce1052 100644 --- a/pjmedia/src/pjmedia/vid_conf.c +++ b/pjmedia/src/pjmedia/vid_conf.c @@ -304,6 +304,7 @@ PJ_DEF(pj_status_t) pjmedia_vid_conf_add_port( pjmedia_vid_conf *vid_conf, PJ_LOG(4,(THIS_FILE, "pjmedia_vid_conf_add_port(): " "unrecognized format %04X", port->info.fmt.id)); + pj_mutex_unlock(vid_conf->mutex); return PJMEDIA_EBADFMT; } @@ -314,6 +315,7 @@ PJ_DEF(pj_status_t) pjmedia_vid_conf_add_port( pjmedia_vid_conf *vid_conf, PJ_LOG(4,(THIS_FILE, "pjmedia_vid_conf_add_port(): " "Failed to apply format %04X", port->info.fmt.id)); + pj_mutex_unlock(vid_conf->mutex); return status; } if (port->put_frame) { @@ -331,28 +333,41 @@ PJ_DEF(pj_status_t) pjmedia_vid_conf_add_port( pjmedia_vid_conf *vid_conf, pj_pool_zalloc(pool, vid_conf->opt.max_slot_cnt * sizeof(unsigned)); - PJ_ASSERT_RETURN(cport->listener_slots, PJ_ENOMEM); + if (!cport->listener_slots) { + pj_mutex_unlock(vid_conf->mutex); + return PJ_ENOMEM; + } /* Create transmitter array */ cport->transmitter_slots = (unsigned*) pj_pool_zalloc(pool, vid_conf->opt.max_slot_cnt * - sizeof(unsigned)); - PJ_ASSERT_RETURN(cport->transmitter_slots, PJ_ENOMEM); + sizeof(unsigned)); + if (!cport->transmitter_slots) { + pj_mutex_unlock(vid_conf->mutex); + return PJ_ENOMEM; + } /* Create pointer-to-render_state array */ cport->render_states = (render_state**) pj_pool_zalloc(pool, vid_conf->opt.max_slot_cnt * sizeof(render_state*)); - PJ_ASSERT_RETURN(cport->render_states, PJ_ENOMEM); + + if (!cport->render_states) { + pj_mutex_unlock(vid_conf->mutex); + return PJ_ENOMEM; + } /* Create pointer-to-render-pool array */ cport->render_pool = (pj_pool_t**) pj_pool_zalloc(pool, vid_conf->opt.max_slot_cnt * - sizeof(pj_pool_t*)); - PJ_ASSERT_RETURN(cport->render_pool, PJ_ENOMEM); + sizeof(pj_pool_t*)); + if (!cport->render_pool) { + pj_mutex_unlock(vid_conf->mutex); + return PJ_ENOMEM; + } /* Register the conf port. */ vid_conf->ports[index] = cport; @@ -420,6 +435,7 @@ PJ_DEF(pj_status_t) pjmedia_vid_conf_remove_port( pjmedia_vid_conf *vid_conf, status = pjmedia_clock_stop(vid_conf->clock); if (status != PJ_SUCCESS) { PJ_PERROR(4, (THIS_FILE, status, "Failed to stop clock")); + pj_mutex_unlock(vid_conf->mutex); return status; } } @@ -584,6 +600,7 @@ PJ_DEF(pj_status_t) pjmedia_vid_conf_connect_port( status = pjmedia_clock_start(vid_conf->clock); if (status != PJ_SUCCESS) { PJ_PERROR(4, (THIS_FILE, status, "Failed to start clock")); + pj_mutex_unlock(vid_conf->mutex); return status; } } @@ -673,6 +690,7 @@ PJ_DEF(pj_status_t) pjmedia_vid_conf_disconnect_port( status = pjmedia_clock_stop(vid_conf->clock); if (status != PJ_SUCCESS) { PJ_PERROR(4, (THIS_FILE, status, "Failed to stop clock")); + pj_mutex_unlock(vid_conf->mutex); return status; } }