From: Richard Mudgett Date: Thu, 23 Jul 2015 19:04:16 +0000 (-0500) Subject: rtp_engine.c: Minor tweaks. X-Git-Tag: 13.6.0-rc1~107^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7427c7f13b1d0c9095e83a3ea38394f521d3a75e;p=thirdparty%2Fasterisk.git rtp_engine.c: Minor tweaks. * Fix off nominial ref leak of new_type in ast_rtp_codecs_payloads_set_m_type(). * No need to lock static_RTP_PT_lock in ast_rtp_codecs_payloads_set_m_type() and ast_rtp_codecs_payloads_set_rtpmap_type_rate() before the payload type parameter sanity check. * No need to create ast_rtp_payload_type ao2 objects with a lock since the lock is not used. Change-Id: I64dd1bb4dfabdc7e981e3f61448beac9bb7504d4 --- diff --git a/main/rtp_engine.c b/main/rtp_engine.c index 0fca0dded4..f139dc4545 100644 --- a/main/rtp_engine.c +++ b/main/rtp_engine.c @@ -236,7 +236,10 @@ static ast_rwlock_t static_RTP_PT_lock; static struct stasis_topic *rtp_topic; -/*! \internal \brief Destructor for \c ast_rtp_payload_type */ +/*! + * \internal + * \brief Destructor for \c ast_rtp_payload_type + */ static void rtp_payload_type_dtor(void *obj) { struct ast_rtp_payload_type *payload = obj; @@ -248,7 +251,8 @@ struct ast_rtp_payload_type *ast_rtp_engine_alloc_payload_type(void) { struct ast_rtp_payload_type *payload; - payload = ao2_alloc(sizeof(*payload), rtp_payload_type_dtor); + payload = ao2_alloc_options(sizeof(*payload), rtp_payload_type_dtor, + AO2_ALLOC_OPT_LOCK_NOLOCK); return payload; } @@ -644,17 +648,16 @@ void ast_rtp_codecs_payloads_set_m_type(struct ast_rtp_codecs *codecs, struct as { struct ast_rtp_payload_type *new_type; - new_type = ast_rtp_engine_alloc_payload_type(); - if (!new_type) { + if (payload < 0 || payload >= AST_RTP_MAX_PT) { return; } - ast_rwlock_rdlock(&static_RTP_PT_lock); - if (payload < 0 || payload >= AST_RTP_MAX_PT) { - ast_rwlock_unlock(&static_RTP_PT_lock); + new_type = ast_rtp_engine_alloc_payload_type(); + if (!new_type) { return; } + ast_rwlock_rdlock(&static_RTP_PT_lock); ast_rwlock_wrlock(&codecs->codecs_lock); if (payload < AST_VECTOR_SIZE(&codecs->payloads)) { ao2_t_cleanup(AST_VECTOR_GET(&codecs->payloads, payload), "cleaning up replaced payload type"); @@ -684,12 +687,11 @@ int ast_rtp_codecs_payloads_set_rtpmap_type_rate(struct ast_rtp_codecs *codecs, unsigned int i; int found = 0; - ast_rwlock_rdlock(&mime_types_lock); if (pt < 0 || pt >= AST_RTP_MAX_PT) { - ast_rwlock_unlock(&mime_types_lock); return -1; /* bogus payload type */ } + ast_rwlock_rdlock(&mime_types_lock); ast_rwlock_wrlock(&codecs->codecs_lock); for (i = 0; i < mime_types_len; ++i) { const struct ast_rtp_mime_type *t = &ast_rtp_mime_types[i]; @@ -2094,7 +2096,7 @@ static void rtp_engine_shutdown(void) ast_rwlock_unlock(&mime_types_lock); } -int ast_rtp_engine_init() +int ast_rtp_engine_init(void) { ast_rwlock_init(&mime_types_lock); ast_rwlock_init(&static_RTP_PT_lock);