]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res/res_pjsip: Resources (udptl fd) are leaking for T.38 calls
authorPaulo Vicentini <paulo.vicentini@gmail.com>
Wed, 13 Feb 2019 13:36:45 +0000 (14:36 +0100)
committerPaulo Vicentini <paulo.vicentini@gmail.com>
Wed, 13 Feb 2019 14:23:17 +0000 (15:23 +0100)
Fix unbalanced references for datastore t38_session_media

ASTERISK-28288

Change-Id: Id6dceceb06651b03f611bf33deb3061022fe5d0c

res/res_pjsip_t38.c

index cd225d4b111b5cfcc9ee362e1bf7d160d30fc70b..62bbb48ef2e2ab577214e521ce4d2daf15725680 100644 (file)
@@ -147,18 +147,23 @@ static struct ast_sip_session_media *session_media_from_datastore_addref(struct
 }
 
 /*! \brief Helper function which allocates datastore with a session media */
-static struct ast_datastore *create_datastore_session_media(struct ast_sip_session *session, struct ast_sip_session_media *session_media)
+static int create_datastore_session_media(struct ast_sip_session *session, struct ast_sip_session_media *session_media)
 {
        struct ast_datastore *datastore = NULL;
 
-       if (!(datastore = ast_sip_session_alloc_datastore(&session_media_datastore, "t38_session_media"))
-               || ast_sip_session_add_datastore(session, datastore)) {
-               return NULL;
+       if (!(datastore = ast_sip_session_alloc_datastore(&session_media_datastore, "t38_session_media"))) {
+               return -1;
+       }
+
+       if (ast_sip_session_add_datastore(session, datastore)) {
+               ao2_ref(datastore, -1);
+               return -1;
        }
 
        datastore->data = session_media;
        ao2_bump(session_media);
-       return datastore;
+       ao2_ref(datastore, -1);
+       return 0;
 }
 
 /*! \brief Helper function for changing the T.38 state */
@@ -296,7 +301,7 @@ static int t38_initialize_session(struct ast_sip_session *session, struct ast_si
                return 0;
        }
 
-       if (!create_datastore_session_media(session, session_media)) {
+       if (create_datastore_session_media(session, session_media)) {
                return -1;
        }