Remove out of memory related code by using glib APIs 55/230655/7 accepted/tizen/unified/20200421.051519 submit/tizen/20200417.051304
authorhj kim <backto.kim@samsung.com>
Mon, 13 Apr 2020 07:17:30 +0000 (16:17 +0900)
committerhj kim <backto.kim@samsung.com>
Fri, 17 Apr 2020 04:12:30 +0000 (13:12 +0900)
glib's memory managed as below.
If any call to allocate memory fails, the application is terminated. This also means that there is no need to check if the call succeeded.

Change-Id: I6789bf638955d97a28a7a66595c8d41165cf204f

include/dcm_svc_debug.h
libdcm-face/dcm-face.c
libdcm-face/dcm-face_mediavision.c
libdcm-face/dcm-face_priv.h
libdcm-face/include/dcm-face.h
libdcm-util/include/dcm_image_codec_debug.h
packaging/dcm-service.spec
src/dcm_svc_db.c
src/dcm_svc_detect_face.c
src/dcm_svc_internal.c

index c810eee1eb161fb897b8947d352e4f10292a20a5..6c128c5f91f6dd34db8e9aee1c6538d96c256758 100755 (executable)
 #define DCM_CHECK_FALSE(expr)                  dcm_retvm_if(!(expr), FALSE, "Invalid parameter, return FALSE!")
 #define DCM_CHECK(expr)                                        dcm_retm_if(!(expr), "Invalid parameter, return!")
 
-#define DCM_SAFE_FREE(ptr) { if (ptr) {free(ptr); ptr = NULL; } }
 #define DCM_SAFE_STRLCPY(dst, src, n)      g_strlcpy(dst, src, n);
 
 #endif /* _DCM_DEBUG_UTILS_H_ */
index e02e42950986e84cbb692fd60c9561c05b8b849f..2a48d0acd5f73c03dbf5beb8c7fc9c8c1e288914 100755 (executable)
@@ -28,8 +28,7 @@ int dcm_face_create(__inout dcm_face_h *handle)
 
        dcm_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid handle");
 
-       FaceHandleT *pFaceHandle = (FaceHandleT *)calloc(1, sizeof(FaceHandleT));
-       dcm_retvm_if(pFaceHandle == NULL, MS_MEDIA_ERR_OUT_OF_MEMORY, "malloc fail");
+       FaceHandleT *pFaceHandle = g_new0(FaceHandleT, 1);
 
        ret = _face_handle_create(&(pFaceHandle->fengine));
        if (ret != MS_MEDIA_ERR_NONE) {
@@ -63,9 +62,9 @@ int dcm_face_destroy(__in dcm_face_h handle)
        handle->magic = FACE_MAGIC_INVALID;
 
        if (handle->image_info != NULL)
-               DCM_SAFE_FREE(handle->image_info->data);
-       DCM_SAFE_FREE(handle->image_info);
-       DCM_SAFE_FREE(handle);
+               g_free(handle->image_info->data);
+       g_free(handle->image_info);
+       g_free(handle);
 
        return ret;
 }
@@ -77,19 +76,14 @@ int dcm_face_set_image_info(dcm_face_h handle, face_image_colorspace_e colorspac
 
        dcm_debug_fenter();
 
-       dcm_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid handle");
-       dcm_retvm_if(buffer == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid buffer");
+       dcm_retvm_if(!handle, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid handle");
+       dcm_retvm_if(!buffer, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid buffer");
 
        switch (colorspace) {
        case FACE_IMAGE_COLORSPACE_YUV420:
        case FACE_IMAGE_COLORSPACE_RGB888:
        case FACE_IMAGE_COLORSPACE_RGBA:
-               data = (unsigned char *)calloc(1, size);
-               if (data == NULL) {
-                       dcm_error("Not allocate memory");
-                       return MS_MEDIA_ERR_OUT_OF_MEMORY;
-               }
-               memcpy(data, buffer, size);
+               data = g_memdup(buffer, size);
                break;
        default:
                dcm_error("Invalid colorspace : [%d]", colorspace);
@@ -97,16 +91,10 @@ int dcm_face_set_image_info(dcm_face_h handle, face_image_colorspace_e colorspac
        }
 
        if (_handle->image_info != NULL)
-               DCM_SAFE_FREE(_handle->image_info->data);
-       DCM_SAFE_FREE(_handle->image_info);
-
-       _handle->image_info = (FaceImage *)calloc(1, sizeof(FaceImage));
+               g_free(_handle->image_info->data);
+       g_free(_handle->image_info);
 
-       if (_handle->image_info == NULL) {
-               dcm_error("Out of memory");
-               DCM_SAFE_FREE(data);
-               return MS_MEDIA_ERR_OUT_OF_MEMORY;
-       }
+       _handle->image_info = g_new0(FaceImage, 1);
 
        _handle->image_info->data = data;
        _handle->image_info->width = width;
@@ -142,8 +130,8 @@ int dcm_face_destroy_face_info(face_info_s *face_info)
 {
        dcm_retvm_if(face_info == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid face_info");
 
-       DCM_SAFE_FREE(face_info->rects);
-       DCM_SAFE_FREE(face_info);
+       g_free(face_info->rects);
+       g_free(face_info);
 
        return MS_MEDIA_ERR_NONE;
 }
index 36b291705044dd5836903360ab1a8bcabbd319cb..aa8ed5a1d340f341572b02afe00baf4b81d8336f 100755 (executable)
@@ -29,7 +29,6 @@ typedef struct media_vision_h {
 } mv_handle;
 
 typedef struct media_vision_result_s {
-       int error;
        face_rect_s *face_rect;
        int count;
 } mv_faceInfo;
@@ -91,29 +90,21 @@ static int __convert_to_mv_colorspace_e(face_image_colorspace_e src, mv_colorspa
        return ret;
 }
 
-void __face_detected_cb(mv_source_h source, mv_engine_config_h cfg, mv_rectangle_s *faces_locations, int number_of_faces, void *user_data)
+static void __face_detected_cb(mv_source_h source, mv_engine_config_h cfg, mv_rectangle_s *faces_locations, int number_of_faces, void *user_data)
 {
        mv_faceInfo* _data = (mv_faceInfo*)user_data;
+       int i = 0;
 
        dcm_error("[No-Error] number of faces: %d", number_of_faces);
 
        if (number_of_faces == 0) {
                _data->face_rect = NULL;
                _data->count = 0;
-               _data->error = MS_MEDIA_ERR_NONE;
-               return;
-       }
 
-       _data->face_rect = (face_rect_s *)calloc(number_of_faces, sizeof(face_rect_s));
-       if (_data->face_rect == NULL) {
-               dcm_error("Cannout allocate face_rect_s");
-               _data->face_rect = NULL;
-               _data->count = 0;
-               _data->error = MS_MEDIA_ERR_OUT_OF_MEMORY;
                return;
        }
 
-       int i = 0;
+       _data->face_rect = g_new0(face_rect_s, number_of_faces);
 
        for (i = 0; i < number_of_faces ; i++) {
                _data->face_rect[i].x = faces_locations[i].point.x;
@@ -124,7 +115,6 @@ void __face_detected_cb(mv_source_h source, mv_engine_config_h cfg, mv_rectangle
        }
 
        _data->count = number_of_faces;
-       _data->error = MS_MEDIA_ERR_NONE;
 
        return;
 }
@@ -132,16 +122,14 @@ void __face_detected_cb(mv_source_h source, mv_engine_config_h cfg, mv_rectangle
 int _face_handle_create(__inout void **handle)
 {
        int err = 0;
-       mv_handle* _handle = (mv_handle*)calloc(1, sizeof(mv_handle));
+       mv_handle* _handle = g_new0(mv_handle, 1);
 
        dcm_debug_fenter();
 
-       dcm_retvm_if(_handle == NULL, MS_MEDIA_ERR_OUT_OF_MEMORY, "handle create fail");
-
        err = mv_create_engine_config(&(_handle->cfg));
        if (err != MEDIA_VISION_ERROR_NONE) {
                dcm_error("fail to mv_create_engine_config");
-               DCM_SAFE_FREE(_handle);
+               g_free(_handle);
                return __convert_to_mv_error_e(err);
        }
 
@@ -151,7 +139,7 @@ int _face_handle_create(__inout void **handle)
                err = mv_destroy_engine_config(_handle->cfg);
                if (err != MEDIA_VISION_ERROR_NONE)
                        dcm_error("fail to mv_destroy_engine_config");
-               DCM_SAFE_FREE(_handle);
+               g_free(_handle);
                return __convert_to_mv_error_e(err);
        }
 
@@ -221,14 +209,8 @@ int _face_detect_faces(__in dcm_face_h handle, __out face_rect_s *face_rect[], _
                return __convert_to_mv_error_e(err);
        }
 
-       if (result.error == MS_MEDIA_ERR_NONE) {
-               *face_rect = result.face_rect;
-               *count = result.count;
-       } else {
-               *face_rect = result.face_rect;
-               *count = result.count;
-               return result.error;
-       }
+       *face_rect = result.face_rect;
+       *count = result.count;
 
        return MS_MEDIA_ERR_NONE;
 }
index 887a625184cea14ef237542bcfac50f6724a583b..df2f82461bb17e42cf8131f2c65320c0f1e92321 100755 (executable)
@@ -30,8 +30,6 @@
 #define FACE_IMAGE_MAGIC               (0x1a2b3c4d)
 #define FACE_INVALID_MAGIC             (0xDEADBEAF)
 
-#define DCM_SAFE_FREE(src)             { if (src) {free(src); src = NULL; } }
-
 typedef struct face_image_s {
        unsigned char *data;
        unsigned int width;
index 8bafeea389bc3c4d4d9aee5be2c2985ec5099c87..7c4b6d5d189c50c2d84c1241a1809d1ce47d174a 100644 (file)
@@ -36,7 +36,6 @@ extern "C" {
  * @return 0 on success, otherwise a negative error value.
  * @retval #MS_MEDIA_ERR_NONE  Successful
  * @retval #MS_MEDIA_ERR_INVALID_PARAMETER Invalid parameter
- * @retval #MS_MEDIA_ERR_OUT_OF_MEMORY Out of memory
  * @see dcm_face_destroy()
  */
 int dcm_face_create(dcm_face_h *handle);
@@ -64,7 +63,6 @@ int dcm_face_destroy(dcm_face_h handle);
  * @return 0 on success, otherwise a negative error value.
  * @retval #MS_MEDIA_ERR_NONE  Successful
  * @retval #MS_MEDIA_ERR_INVALID_PARAMETER Invalid parameter
- * @retval #MS_MEDIA_ERR_OUT_OF_MEMORY Out of memory
  * @see dcm_face_create()
  */
 int dcm_face_set_image_info(dcm_face_h handle, face_image_colorspace_e colorspace, unsigned char *buffer, unsigned int width, unsigned int height, size_t size);
index 3797d467745a1aa8857ec3f05025b7849cc7873c..b0d8defda7eb09d24601e227eba1f5b59238b42c 100755 (executable)
@@ -83,6 +83,4 @@
 
 #define DCM_CHECK_VAL(expr, val)               dcm_retvm_if(!(expr), val , "Invalid parameter, return ERROR code!")
 
-#define DCM_SAFE_FREE(ptr) { if (ptr) {free(ptr); ptr = NULL; } }
-
 #endif /* _DCM_DEBUG_UTILS_H_ */
index f60609f0df0a6c22790e0633d8f53bf0b8c331ec..63db162855e8292d2fbaca6e64c860af37c6ba73 100644 (file)
@@ -1,6 +1,6 @@
 Name:       dcm-service
 Summary:    A media DCM(Digital Contents Management) Service
-Version:    0.2.3
+Version:    0.2.4
 Release:    0
 Group:      Multimedia/Service
 License:    Apache-2.0
index 0f00fcc2d7722fdd568dd44f6914ef8a63a2e9cb..c06a7f0a8ba8ddfb95f6c0667af40d649e953a5a 100755 (executable)
@@ -86,12 +86,7 @@ int dcm_svc_db_get_scan_image_info_by_path(const char *file_path, uid_t uid, dcm
        if (ret != MS_MEDIA_ERR_NONE)
                goto ERROR;
 
-       _item = (dcm_svc_item_s *) calloc(1, sizeof(dcm_svc_item_s));
-       if (!_item) {
-               dcm_error("Allocation failed");
-               ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
-               goto ERROR;
-       }
+       _item = g_new0(dcm_svc_item_s, 1);
 
        _item->media_uuid = g_strdup((const char *)sqlite3_column_text(sql_stmt, 0));
        _item->file_path = g_strdup(file_path);
index ec6345a5b9886496f271ad0550b44ace09284bab..d14d921cdc99437c90f158c9815939c2cf203832 100755 (executable)
@@ -103,12 +103,7 @@ int dcm_face_detect_process(dcm_svc_item_s *scan_item, dcm_face_scan_status_e sc
                goto DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED;
        }
 
-       face_info = (face_info_s *)calloc(1, sizeof(face_info_s));
-       if (face_info == NULL) {
-               dcm_error("Failed to allocate face info");
-               ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
-               goto DCM_SVC_FACE_RECOGNIZE_BUFFER_FAILED;
-       }
+       face_info = (face_info_s *)g_new0(face_info_s, 1);
 
        ret = dcm_face_get_face_info(dcm_face_handle, face_info);
        if (ret != MS_MEDIA_ERR_NONE) {
index a3a94210cc48b2d0e58806c41984b83fa9fdab2a..730e5a438def24b4cfc4766615d4e2d0d3a2d25d 100755 (executable)
@@ -33,7 +33,7 @@ static int __dcm_scan_process(dcm_svc_item_s *scan_item, uid_t uid)
        DCM_CHECK_VAL(scan_item->file_path, MS_MEDIA_ERR_INVALID_PARAMETER);
 
        dcm_image_info_s image_info = {0, };
-       memset(&image_info, 0, sizeof(dcm_image_info_s));
+
        image_info.decode_type = DCM_IMAGE_FORMAT_I420;
 
        if (g_file_test(scan_item->file_path, G_FILE_TEST_IS_REGULAR)) {
@@ -82,7 +82,7 @@ static int __dcm_scan_process(dcm_svc_item_s *scan_item, uid_t uid)
                        dcm_error("Failed to process face detection! err: %d", ret);
 
                /* Free image buffer */
-               DCM_SAFE_FREE(image_info.pixel);
+               g_free(image_info.pixel);
        } else {
                dcm_warn("The file does not exist");
                ret = MS_MEDIA_ERR_INVALID_PARAMETER;
@@ -118,7 +118,7 @@ int dcm_scan_single(const char *file_path, uid_t uid, int *face_count)
        g_free(scan_item->media_uuid);
        g_free(scan_item->file_path);
        g_free(scan_item->mime_type);
-       DCM_SAFE_FREE(scan_item);
+       g_free(scan_item);
 
        dcm_debug_fleave();