Fix memory leak - Destroy handle without going to idle after recording 29/47429/1
authorJeongmo Yang <jm80.yang@samsung.com>
Thu, 3 Sep 2015 09:03:55 +0000 (18:03 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Thu, 3 Sep 2015 09:03:55 +0000 (18:03 +0900)
Change-Id: Ib96235d8fb296a53d11ae594e0bba81ac4b87de1
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
src/mm_camcorder_util.c

index 3c0b1a3..f32db9b 100644 (file)
@@ -1060,10 +1060,23 @@ MSG_CALLBACK_DONE:
                        SAFE_FREE(cam_fd_info->face_info);
                        free(cam_fd_info);
                        cam_fd_info = NULL;
+
+                       item->param.data = NULL;
+                       item->param.size = 0;
                }
+       } else if (item->id == MM_MESSAGE_CAMCORDER_VIDEO_CAPTURED ||
+                  item->id == MM_MESSAGE_CAMCORDER_AUDIO_CAPTURED) {
+               MMCamRecordingReport *report = (MMCamRecordingReport *)item->param.data;
+               if (report) {
+                       if (report->recording_filename) {
+                               free(report->recording_filename);
+                               report->recording_filename = NULL;
+                       }
+                       free(report);
+                       report = NULL;
 
-               item->param.data = NULL;
-               item->param.size = 0;
+                       item->param.data = NULL;
+               }
        }
 
        pthread_mutex_unlock(&(item->lock));
@@ -1183,10 +1196,23 @@ void _mmcamcorder_remove_message_all(MMHandleType handle)
                                                        SAFE_FREE(cam_fd_info->face_info);
                                                        free(cam_fd_info);
                                                        cam_fd_info = NULL;
-                                               }
 
-                                               item->param.data = NULL;
-                                               item->param.size = 0;
+                                                       item->param.data = NULL;
+                                                       item->param.size = 0;
+                                               }
+                                       } else if (item->id == MM_MESSAGE_CAMCORDER_VIDEO_CAPTURED ||
+                                                  item->id == MM_MESSAGE_CAMCORDER_AUDIO_CAPTURED) {
+                                               MMCamRecordingReport *report = (MMCamRecordingReport *)item->param.data;
+                                               if (report) {
+                                                       if (report->recording_filename) {
+                                                               free(report->recording_filename);
+                                                               report->recording_filename = NULL;
+                                                       }
+                                                       free(report);
+                                                       report = NULL;
+
+                                                       item->param.data = NULL;
+                                               }
                                        }
 
                                        hcamcorder->msg_data = g_list_remove(hcamcorder->msg_data, item);