Skip to content
Snippets Groups Projects
Commit bc1eae55 authored by Richard Mudgett's avatar Richard Mudgett
Browse files

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
parent d12dc97f
Branches
Tags
No related merge requests found
...@@ -236,7 +236,10 @@ static ast_rwlock_t static_RTP_PT_lock; ...@@ -236,7 +236,10 @@ static ast_rwlock_t static_RTP_PT_lock;
static struct stasis_topic *rtp_topic; 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) static void rtp_payload_type_dtor(void *obj)
{ {
struct ast_rtp_payload_type *payload = obj; struct ast_rtp_payload_type *payload = obj;
...@@ -248,7 +251,8 @@ struct ast_rtp_payload_type *ast_rtp_engine_alloc_payload_type(void) ...@@ -248,7 +251,8 @@ struct ast_rtp_payload_type *ast_rtp_engine_alloc_payload_type(void)
{ {
struct ast_rtp_payload_type *payload; 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; return payload;
} }
...@@ -644,17 +648,16 @@ void ast_rtp_codecs_payloads_set_m_type(struct ast_rtp_codecs *codecs, struct as ...@@ -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; struct ast_rtp_payload_type *new_type;
new_type = ast_rtp_engine_alloc_payload_type(); if (payload < 0 || payload >= AST_RTP_MAX_PT) {
if (!new_type) {
return; return;
} }
ast_rwlock_rdlock(&static_RTP_PT_lock); new_type = ast_rtp_engine_alloc_payload_type();
if (payload < 0 || payload >= AST_RTP_MAX_PT) { if (!new_type) {
ast_rwlock_unlock(&static_RTP_PT_lock);
return; return;
} }
ast_rwlock_rdlock(&static_RTP_PT_lock);
ast_rwlock_wrlock(&codecs->codecs_lock); ast_rwlock_wrlock(&codecs->codecs_lock);
if (payload < AST_VECTOR_SIZE(&codecs->payloads)) { if (payload < AST_VECTOR_SIZE(&codecs->payloads)) {
ao2_t_cleanup(AST_VECTOR_GET(&codecs->payloads, payload), "cleaning up replaced payload type"); 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, ...@@ -684,12 +687,11 @@ int ast_rtp_codecs_payloads_set_rtpmap_type_rate(struct ast_rtp_codecs *codecs,
unsigned int i; unsigned int i;
int found = 0; int found = 0;
ast_rwlock_rdlock(&mime_types_lock);
if (pt < 0 || pt >= AST_RTP_MAX_PT) { if (pt < 0 || pt >= AST_RTP_MAX_PT) {
ast_rwlock_unlock(&mime_types_lock);
return -1; /* bogus payload type */ return -1; /* bogus payload type */
} }
ast_rwlock_rdlock(&mime_types_lock);
ast_rwlock_wrlock(&codecs->codecs_lock); ast_rwlock_wrlock(&codecs->codecs_lock);
for (i = 0; i < mime_types_len; ++i) { for (i = 0; i < mime_types_len; ++i) {
const struct ast_rtp_mime_type *t = &ast_rtp_mime_types[i]; const struct ast_rtp_mime_type *t = &ast_rtp_mime_types[i];
...@@ -2094,7 +2096,7 @@ static void rtp_engine_shutdown(void) ...@@ -2094,7 +2096,7 @@ static void rtp_engine_shutdown(void)
ast_rwlock_unlock(&mime_types_lock); 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(&mime_types_lock);
ast_rwlock_init(&static_RTP_PT_lock); ast_rwlock_init(&static_RTP_PT_lock);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment