mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-03 19:16:46 +00:00
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
This commit is contained in:
@@ -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)
|
|||||||
{
|
{
|
||||||
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
|
|||||||
{
|
{
|
||||||
struct ast_rtp_payload_type *new_type;
|
struct ast_rtp_payload_type *new_type;
|
||||||
|
|
||||||
|
if (payload < 0 || payload >= AST_RTP_MAX_PT) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
new_type = ast_rtp_engine_alloc_payload_type();
|
new_type = ast_rtp_engine_alloc_payload_type();
|
||||||
if (!new_type) {
|
if (!new_type) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_rwlock_rdlock(&static_RTP_PT_lock);
|
ast_rwlock_rdlock(&static_RTP_PT_lock);
|
||||||
if (payload < 0 || payload >= AST_RTP_MAX_PT) {
|
|
||||||
ast_rwlock_unlock(&static_RTP_PT_lock);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
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,
|
|||||||
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)
|
|||||||
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);
|
||||||
|
Reference in New Issue
Block a user