Get allocated device list and add deallocate interface 45/52245/9 accepted/tizen/mobile/20151209.132859 accepted/tizen/tv/20151209.132920 accepted/tizen/wearable/20151209.132945 submit/tizen/20151209.054020
authorMok Jeongho <jho.mok@samsung.com>
Tue, 3 Nov 2015 05:32:26 +0000 (14:32 +0900)
committerMok Jeongho <jho.mok@samsung.com>
Tue, 8 Dec 2015 22:55:48 +0000 (07:55 +0900)
Previously when we get device list,
it is maintained on global variable.
We fixed that not to use global variable then allocate memory for device list.
And now it needs deallocate interface also, so we added it.

[Version] Release 0.3.34
[profile] Common
[Issue Type] code clean-up

Change-Id: Ica8f0df6a76e02e613072026e2d54aa034d49d6c

include/sound_manager.h
packaging/capi-media-sound-manager.spec
src/sound_manager.c
src/sound_manager_private.c
test/sound_manager_test.c

index 0dfc3472157cbf87410d2ea94acf4c8127cf26c3..7cc7a1b6dff17b599539e9a13920afc45824c7cc 100644 (file)
@@ -1047,7 +1047,8 @@ int sound_manager_unset_session_interrupted_cb(void);
  * @param[in]  device_mask     The mask value
  * @param[out] device_list     The list of connected devices
  *
- * @remarks    Use sound_manager_get_next_device() to get the first node of the list.
+ * @remarks    @a device_list should be freed using sound_manager_free_device_list() since 3.0.\n
+ *     Use sound_manager_get_next_device() to get the first node of the list.
  *
  * @return @c 0 on success,
  *         otherwise a negative error value
@@ -1062,9 +1063,34 @@ int sound_manager_unset_session_interrupted_cb(void);
  * @see sound_manager_get_device_id()
  * @see sound_manager_get_device_name()
  * @see sound_manager_get_device_state()
+ * @see sound_manager_free_device_list()
  */
 int sound_manager_get_current_device_list(sound_device_mask_e device_mask, sound_device_list_h *device_list);
 
+/**
+ * @brief Frees device list and each item of list.
+ * @since_tizen 3.0
+ * @param[in]  device_list     The device list got with sound_manager_get_current_device_list.
+ *
+ * @remarks    This API will deallocate not only device list itself but also each item.
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #SOUND_MANAGER_ERROR_NONE Success
+ * @retval #SOUND_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ *
+ *
+ * @see sound_manager_get_current_device_list()
+ * @see sound_manager_get_next_device()
+ * @see sound_manager_get_prev_device()
+ * @see sound_manager_get_device_type()
+ * @see sound_manager_get_device_io_direction()
+ * @see sound_manager_get_device_id()
+ * @see sound_manager_get_device_name()
+ * @see sound_manager_get_device_state()
+ */
+int sound_manager_free_device_list(sound_device_list_h device_list);
+
 /**
  * @brief Gets the next item of the device list.
  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
@@ -1082,6 +1108,7 @@ int sound_manager_get_current_device_list(sound_device_mask_e device_mask, sound
  * @see sound_manager_get_device_id()
  * @see sound_manager_get_device_name()
  * @see sound_manager_get_device_state()
+ * @see sound_manager_free_device_list()
  */
 int sound_manager_get_next_device(sound_device_list_h device_list, sound_device_h *device);
 
@@ -1102,6 +1129,7 @@ int sound_manager_get_next_device(sound_device_list_h device_list, sound_device_
  * @see sound_manager_get_device_id()
  * @see sound_manager_get_device_name()
  * @see sound_manager_get_device_state()
+ * @see sound_manager_free_device_list()
  */
 int sound_manager_get_prev_device(sound_device_list_h device_list, sound_device_h *device);
 
@@ -1121,6 +1149,7 @@ int sound_manager_get_prev_device(sound_device_list_h device_list, sound_device_
  * @see sound_manager_get_device_id()
  * @see sound_manager_get_device_name()
  * @see sound_manager_get_device_state()
+ * @see sound_manager_free_device_list()
  */
 int sound_manager_get_device_type(sound_device_h device, sound_device_type_e *type);
 
@@ -1140,6 +1169,7 @@ int sound_manager_get_device_type(sound_device_h device, sound_device_type_e *ty
  * @see sound_manager_get_device_id()
  * @see sound_manager_get_device_name()
  * @see sound_manager_get_device_state()
+ * @see sound_manager_free_device_list()
  */
 int sound_manager_get_device_io_direction(sound_device_h device, sound_device_io_direction_e *io_direction);
 
@@ -1159,6 +1189,7 @@ int sound_manager_get_device_io_direction(sound_device_h device, sound_device_io
  * @see sound_manager_get_device_io_direction()
  * @see sound_manager_get_device_name()
  * @see sound_manager_get_device_state()
+ * @see sound_manager_free_device_list()
  */
 int sound_manager_get_device_id(sound_device_h device, int *id);
 
@@ -1179,6 +1210,7 @@ int sound_manager_get_device_id(sound_device_h device, int *id);
  * @see sound_manager_get_device_io_direction()
  * @see sound_manager_get_device_id()
  * @see sound_manager_get_device_state()
+ * @see sound_manager_free_device_list()
  */
 int sound_manager_get_device_name(sound_device_h device, char **name);
 
@@ -1198,6 +1230,7 @@ int sound_manager_get_device_name(sound_device_h device, char **name);
  * @see sound_manager_get_device_io_direction()
  * @see sound_manager_get_device_id()
  * @see sound_manager_get_device_name()
+ * @see sound_manager_free_device_list()
  */
 int sound_manager_get_device_state(sound_device_h device, sound_device_state_e *state);
 
index 56ea07305e9a182d477c52b4a585aac1b4eb5012..0eaa72171ab197fd7cb16c8ec5b6f204c8aa5615 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       capi-media-sound-manager
 Summary:    Sound Manager library
-Version:    0.3.33
+Version:    0.3.34
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 368db9fd4823437974614ebaab5d4e2f9dbdaf45..2e808dce722b7f2bd97d1a4c2731ffa0841fa03e 100644 (file)
@@ -926,6 +926,14 @@ int sound_manager_get_current_device_list(sound_device_mask_e device_mask, sound
        return _convert_sound_manager_error_code(__func__, ret);
 }
 
+int sound_manager_free_device_list(sound_device_list_h device_list)
+{
+       int ret = MM_ERROR_NONE;
+       ret = mm_sound_free_device_list(device_list);
+
+       return _convert_sound_manager_error_code(__func__, ret);
+}
+
 int sound_manager_get_next_device(sound_device_list_h device_list, sound_device_h *device)
 {
        int ret = MM_ERROR_NONE;
index 02e66a29174a470cc21d7bfb91e192699184c284..06e3fb9bab2e129c79e028cbae61ca025a74ddb0 100644 (file)
@@ -1273,6 +1273,7 @@ int _set_session_mode(_session_mode_e mode)
                        } else
                                goto ERROR_CASE;
                }
+               mm_sound_free_device_list(device_list);
                break;
        }
        g_cached_session_mode = mode;
index 0e6ea7ebf0269a3bd6883b7daa770379c45e2212..3af3e53f2b84bce8b0ad794d3391a6d15928d7a6 100644 (file)
@@ -50,6 +50,7 @@ enum {
        CURRENT_STATUS_SET_DEVICE_MASK,
        CURRENT_STATUS_GET_DEVICE_MASK,
        CURRENT_STATUS_GET_DEVICE_LIST,
+       CURRENT_STATUS_FREE_DEVICE_LIST,
        CURRENT_STATUS_GET_DEVICE_NEXT,
        CURRENT_STATUS_GET_DEVICE_PREV,
        CURRENT_STATUS_SET_DEVICE_CONNECTED_CB,
@@ -176,6 +177,8 @@ void _interpret_main_menu(char *cmd)
                g_menu_state = CURRENT_STATUS_GET_DEVICE_MASK;
        else if (strncmp(cmd, "gl", 3) == 0)
                g_menu_state = CURRENT_STATUS_GET_DEVICE_LIST;
+       else if (strncmp(cmd, "fl", 3) == 0)
+               g_menu_state = CURRENT_STATUS_FREE_DEVICE_LIST;
        else if (strncmp(cmd, "gn", 3) == 0)
                g_menu_state = CURRENT_STATUS_GET_DEVICE_NEXT;
        else if (strncmp(cmd, "gp", 3) == 0)
@@ -274,7 +277,8 @@ void display_sub_basic()
        g_print("-----------------------------------------------------------------------------------------\n");
        g_print("sk. Set Devices Mask(default ALL)\t");
        g_print("gk. Get Devices Mask\n");
-       g_print("gl. Get Devices List\n");
+       g_print("gl. Get Devices List\t");
+       g_print("fl. Free Devices List\n");
        g_print("gn. Get Next Device\t\t");
        g_print("gp. Get Prev Device\n");
        g_print("sd. Set Device Connenected CB\t\t");
@@ -362,6 +366,8 @@ static void displaymenu()
                g_print("*** press enter to get device mask\n");
        else if (g_menu_state == CURRENT_STATUS_GET_DEVICE_LIST)
                g_print("*** press enter to get device list\n");
+       else if (g_menu_state == CURRENT_STATUS_FREE_DEVICE_LIST)
+               g_print("*** press enter to free device list\n");
        else if (g_menu_state == CURRENT_STATUS_GET_DEVICE_NEXT)
                g_print("*** press enter to get next device from the list\n");
        else if (g_menu_state == CURRENT_STATUS_GET_DEVICE_PREV)
@@ -869,6 +875,18 @@ static void interpret(char *cmd)
                reset_menu_state();
                break;
        }
+       case CURRENT_STATUS_FREE_DEVICE_LIST: {
+               int ret = SOUND_MANAGER_ERROR_NONE;
+               if (!(ret = sound_manager_free_device_list(g_device_list))) {
+                       g_print("success to free device list\n");
+                       g_device_list = NULL;
+                       g_print("device list freed\n");
+               } else {
+                       g_print("fail to free device list, ret[0x%x]\n", ret);
+               }
+               reset_menu_state();
+               break;
+       }
        case CURRENT_STATUS_GET_DEVICE_NEXT: {
                sound_device_h device;
                sound_device_type_e type;