Memory free after message send 94/61694/4 accepted/tizen/common/20160311.203705 accepted/tizen/ivi/20160311.150258 accepted/tizen/mobile/20160311.143239 accepted/tizen/tv/20160311.144825 accepted/tizen/wearable/20160311.145628 submit/tizen/20160311.064229
authorSeokHoon Lee <andy.shlee@samsung.com>
Thu, 10 Mar 2016 01:33:02 +0000 (10:33 +0900)
committerSeokHoon Lee <andy.shlee@samsung.com>
Fri, 11 Mar 2016 06:33:01 +0000 (15:33 +0900)
Signed-off-by: SeokHoon Lee <andy.shlee@samsung.com>
Change-Id: I5bec74b5710890d049d28f663a25bc081ed335db

packaging/libmm-streamrecorder.spec
src/mm_streamrecorder_gstdispatch.c
src/mm_streamrecorder_internal.c
src/mm_streamrecorder_recorder.c

index 9d9abb5..e30c202 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-streamrecorder
 Summary:    Media Stream Recorder library
-Version:    0.0.2
+Version:    0.0.3
 Release:    0
 Group:      Multimedia/Other
 License:    Apache-2.0
index 32b6b56..e53c821 100644 (file)
@@ -297,7 +297,10 @@ gboolean _mmstreamrecorder_msg_callback(void *data)
        mmf_return_val_if_fail(item, FALSE);
 
        hstreamrecorder = MMF_STREAMRECORDER(item->handle);
-       mmf_return_val_if_fail(hstreamrecorder, FALSE);
+       if(hstreamrecorder == NULL) {
+               _mmstreamrec_dbg_warn("msg id:0x%x, item:%p, handle is NULL", item->id, item);
+               goto MSG_CALLBACK_DONE;
+       }
 
        /* _mmstreamrec_dbg_log("msg id:%x, msg_cb:%p, msg_data:%p, item:%p", item->id, hstreamrecorder->msg_cb, hstreamrecorder->msg_data, item); */
        _MMSTREAMRECORDER_LOCK_MESSAGE_CALLBACK(hstreamrecorder);
@@ -311,9 +314,21 @@ gboolean _mmstreamrecorder_msg_callback(void *data)
        if (hstreamrecorder->msg_data)
                hstreamrecorder->msg_data = g_list_remove(hstreamrecorder->msg_data, item);
 
-       free(item);
-       item = NULL;
        _MMSTREAMRECORDER_UNLOCK((MMHandleType) hstreamrecorder);
+
+MSG_CALLBACK_DONE:
+       /* release allocated memory */
+       if (item->id == MM_MESSAGE_STREAMRECORDER_VIDEO_CAPTURED ||
+               item->id == MM_MESSAGE_STREAMRECORDER_AUDIO_CAPTURED) {
+               MMStreamRecordingReport *report = (MMStreamRecordingReport *)item->param.data;
+               if (report) {
+                       SAFE_FREE(report->recording_filename);
+                       item->param.data = NULL;
+               }
+               SAFE_FREE(report);
+       }
+       SAFE_FREE(item);
+
        /* For not being called again */
        return FALSE;
 }
index 5532002..435f5d5 100644 (file)
@@ -156,7 +156,7 @@ void _mmstreamrecorder_set_state(MMHandleType handle, int state)
        mmf_streamrecorder_t *streamrecorder = MMF_STREAMRECORDER(handle);
        _MMStreamRecorderMsgItem msg;
 
-       mmf_return_val_if_fail(streamrecorder, MM_ERROR_STREAMRECORDER_INVALID_ARGUMENT);
+       mmf_return_if_fail(streamrecorder);
 
        /*_mmstreamrec_dbg_log("");*/
 
index 94a8cc8..2d5c083 100644 (file)
@@ -647,7 +647,7 @@ int _mmstreamrecorder_create_encodesink_bin(MMHandleType handle, MMStreamRecorde
        else
                info->max_time = ((guint64) imax_time) * 1000;  /* to millisecond */
 
-       finfo->filename = strdup(temp_filename);
+       finfo->filename = g_strdup(temp_filename);
        if (!finfo->filename) {
                _mmstreamrec_dbg_err("strdup was failed");
                return err;
@@ -1293,11 +1293,11 @@ int _mmstreamrecorder_video_handle_eos(MMHandleType handle)
 
        /* Send recording report to application */
        msg.id = MM_MESSAGE_STREAMRECORDER_VIDEO_CAPTURED;
-       report = (MMStreamRecordingReport *) malloc(sizeof(MMStreamRecordingReport));
+       report = (MMStreamRecordingReport *) g_malloc(sizeof(MMStreamRecordingReport));
        if (!report) {
                _mmstreamrec_dbg_err("Recording report fail(%s). Out of memory.", finfo->filename);
        } else {
-               report->recording_filename = strdup(finfo->filename);
+               report->recording_filename = g_strdup(finfo->filename);
                msg.param.data = report;
                msg.param.code = 1;
                _mmstreamrecorder_send_message((MMHandleType) hstreamrecorder, &msg);
@@ -1597,7 +1597,7 @@ int _mmstreamrecorder_audio_command(MMHandleType handle, int command)
                                goto _ERR_STREAMRECORDER_AUDIO_COMMAND;
                        }
 
-                       finfo->filename = strdup(temp_filename);
+                       finfo->filename = g_strdup(temp_filename);
                        if (!finfo->filename) {
                                _mmstreamrec_dbg_err("STRDUP was failed");
                                goto _ERR_STREAMRECORDER_AUDIO_COMMAND;
@@ -1798,7 +1798,7 @@ int _mmstreamrecorder_audio_handle_eos(MMHandleType handle)
 
        /* Send recording report message to application */
        msg.id = MM_MESSAGE_STREAMRECORDER_AUDIO_CAPTURED;
-       report = (MMStreamRecordingReport *) malloc(sizeof(MMStreamRecordingReport));
+       report = (MMStreamRecordingReport *) g_malloc(sizeof(MMStreamRecordingReport));
        if (!report) {
                _mmstreamrec_dbg_err("Recording report fail(%s). Out of memory.", finfo->filename);
                return FALSE;
@@ -1810,7 +1810,7 @@ int _mmstreamrecorder_audio_handle_eos(MMHandleType handle)
                _mmstreamrecorder_audio_add_metadata_info_m4a(handle);
        /* END TAG HERE */
 
-       report->recording_filename = strdup(finfo->filename);
+       report->recording_filename = g_strdup(finfo->filename);
        msg.param.data = report;
 
        _mmstreamrecorder_send_message(handle, &msg);