]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fixing term service change mem leak issue
authorKapil Gupta <kgupta@sangoma.com>
Mon, 27 Aug 2012 15:54:05 +0000 (11:54 -0400)
committerKapil Gupta <kgupta@sangoma.com>
Mon, 27 Aug 2012 15:54:05 +0000 (11:54 -0400)
src/mod/endpoints/mod_media_gateway/media_gateway_cli.c
src/mod/endpoints/mod_media_gateway/media_gateway_cmd_handler.c
src/mod/endpoints/mod_media_gateway/media_gateway_utils.c
src/mod/endpoints/mod_media_gateway/mod_media_gateway.h

index dff9da3294659c01ad228ba5218300c78142b6a4..97b3d1c79d2e181b4dce6efee518dd2cff1c91dd 100644 (file)
@@ -886,6 +886,10 @@ switch_status_t handle_show_stats(switch_stream_handle_t *stream, megaco_profile
                return SWITCH_STATUS_FALSE;
        }
 
+       stream->write_function(stream, "Total Number of IN-Service Service change sent  = %d \n", 
+                       mg_profile->mg_stats->total_num_of_term_in_service_change_sent); 
+       stream->write_function(stream, "Total Number of Out-Of-Service Service change sent  = %d \n", 
+                       mg_profile->mg_stats->total_num_of_term_oos_service_change_sent); 
        stream->write_function(stream, "Total Number of Physical ADD received  = %d \n", mg_profile->mg_stats->total_num_of_phy_add_recvd); 
        stream->write_function(stream, "Total Number of RTP      ADD received  = %d \n", mg_profile->mg_stats->total_num_of_rtp_add_recvd); 
        stream->write_function(stream, "Total Number of SUB received  = %d \n", mg_profile->mg_stats->total_num_of_sub_recvd); 
index 0cf98ed13743f3fc3a1950d7ca15a42f8ebd0116..9ed09d8b7b29a8c47720f93127eb2ea190388a64 100644 (file)
@@ -848,11 +848,6 @@ switch_status_t handle_mg_add_cmd(megaco_profile_t* mg_profile, MgMgcoCommand *i
 
         ret = sng_mgco_send_cmd( mg_profile->idx, &rsp);
 
-       
-       if(is_rtp){
-               /* releasing memory allocated for term->lcl.val */
-               MG_STACK_MEM_FREE(out_termId->name.lcl.val, ((sizeof(U8)* strlen(term->name))));
-       }
     }
 
     /*************************************************************************************************************************/
@@ -1936,6 +1931,7 @@ switch_status_t mg_send_ins_service_change(megaco_profile_t* mg_profile, const c
                          "Sending In-Service Service Change for termination[%s] configured in mg profile[%s], suId[%d]\n", 
                           term_name, mg_profile->name, mg_profile->idx);
 
+       mg_profile->mg_stats->total_num_of_term_in_service_change_sent++;
        return mg_send_service_change(mg_profile->idx, term_name, MGT_SVCCHGMETH_RESTART, MG_SVC_REASON_900_RESTORED, wild);
 }
 
@@ -1952,6 +1948,8 @@ switch_status_t mg_send_oos_service_change(megaco_profile_t* mg_profile, const c
                          "Sending Out-Of-Service Service Change for termination[%s] configured in mg profile[%s], suId[%d]\n", 
                           term_name, mg_profile->name, mg_profile->idx);
 
+       mg_profile->mg_stats->total_num_of_term_oos_service_change_sent++;
+
        return mg_send_service_change(mg_profile->idx, term_name, MGT_SVCCHGMETH_FORCED, MG_SVC_REASON_905_TERM_OOS, wild);
 }
 /*****************************************************************************************************************************/
@@ -2029,9 +2027,6 @@ switch_status_t  mg_send_service_change(SuId suId, const char* term_name, uint8_
 
        sng_mgco_send_cmd(suId, &request);
 
-       /* releasing memory allocated for term->lcl.val */
-       MG_STACK_MEM_FREE(termId->name.lcl.val, ((sizeof(U8)* strlen(term_name))));
-
        return SWITCH_STATUS_SUCCESS;
 
 err:
@@ -2471,9 +2466,6 @@ switch_status_t  mg_send_notify(megaco_profile_t* mg_profile, const char* term_n
 
     sng_mgco_send_cmd(mg_profile->idx, &request);
 
-    /* releasing memory allocated for term->lcl.val */
-    MG_STACK_MEM_FREE(termId->name.lcl.val, ((sizeof(U8)* strlen(term_name))));
-
     return SWITCH_STATUS_SUCCESS;
 }
 /*****************************************************************************************************************************/
index 9ff581f916fb029ac8b1ee3af7910b54f2ca9da9..8594e41d978588cd709f147d905e11c24f07b6a9 100644 (file)
@@ -111,6 +111,8 @@ S16 mg_fill_mgco_termid ( MgMgcoTermId  *termId, char* term_str, int term_len, C
        Size              size;
 #endif
        S16               ret = ROK;
+       Ptr* ptr = NULL;
+
        memset(&prnt_buf,0,sizeof(prnt_buf));
 
        termId->type.pres = PRSNT_NODEF;
@@ -121,18 +123,33 @@ S16 mg_fill_mgco_termid ( MgMgcoTermId  *termId, char* term_str, int term_len, C
 
                termId->type.val  = MGT_TERMID_OTHER;
 
+               termId->name.pres.pres = PRSNT_NODEF;
+
+               /* domain */
                termId->name.dom.pres = NOTPRSNT;  
-               termId->name.dom.len = 0x00;  
+               termId->name.dom.len = 0x00;
 
-               termId->name.pres.pres = PRSNT_NODEF;
+               ptr = (Ptr*)&termId->name.dom.val;
+               if( cmGetMem(memCp, 128, ptr) != ROK ){
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,"cmGetMem failed \n");
+                       RETVALUE(RFAILED);
+               }
 
+               /* term name */
                termId->name.lcl.pres  = PRSNT_NODEF;
-               termId->name.lcl.len  = cmStrlen((U8*)term_str);
-               size = ((sizeof(U8)* term_len));
-               MG_STACK_MEM_ALLOC(&termId->name.lcl.val, size);
-               cmMemcpy((U8*)(termId->name.lcl.val),(CONSTANT U8*)term_str,termId->name.lcl.len);
+               termId->name.lcl.len = cmStrlen((CONSTANT U8*)term_str);
+
+               ptr = (Ptr*)&termId->name.lcl.val;
+               if( cmGetMem(memCp, termId->name.lcl.len, ptr) != ROK ){
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,"cmGetMem failed \n");
+                       RETVALUE(RFAILED);
+               }
+
+               cmMemset((U8 *)(termId->name.lcl.val), (U8)0,  (PTR)(termId->name.lcl.len));
+
+               cmMemcpy((U8*)(termId->name.lcl.val), (CONSTANT U8*)term_str,termId->name.lcl.len);
 
-               MG_MEM_COPY(&prnt_buf, termId->name.lcl.val, sizeof(U8) * termId->name.lcl.len);
+               cmMemcpy((U8*)(prnt_buf), (CONSTANT U8*)termId->name.lcl.val,termId->name.lcl.len);
 
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
                                "mg_fill_mgco_termid: Megaco termination name[%s], len[%d], input_term_str[%s], input_term_len[%d]\n",
index a8438cc10972bd66a3b536617812c2637f16760d..fba52c881d2f80e2e420a6cc5d743a14ca5bab11 100644 (file)
@@ -63,6 +63,8 @@ typedef struct mg_peer_profile_s{
 
 typedef struct mg_stats_s{
        uint32_t  total_num_of_phy_add_recvd;
+       uint32_t  total_num_of_term_in_service_change_sent;
+       uint32_t  total_num_of_term_oos_service_change_sent;
        uint32_t  total_num_of_rtp_add_recvd;
        uint32_t  total_num_of_sub_recvd;
        uint32_t  total_num_of_call_recvd;