From: Sangchul Lee Date: Mon, 4 Jan 2016 06:39:48 +0000 (+0900) Subject: Add handling mutex codes for stream info handle created by internal API X-Git-Tag: submit/tizen/20160111.093338~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F77%2F56077%2F2;p=platform%2Fcore%2Fapi%2Fsound-manager.git Add handling mutex codes for stream info handle created by internal API [Version] Release 0.3.38 [profile] Common [Issue Type] Feature enhancement Change-Id: Id62f64124ef0da2596e4266d54ba76618ca3a2fc --- diff --git a/packaging/capi-media-sound-manager.spec b/packaging/capi-media-sound-manager.spec index a6a21dd..2ad3d1d 100755 --- a/packaging/capi-media-sound-manager.spec +++ b/packaging/capi-media-sound-manager.spec @@ -1,6 +1,6 @@ Name: capi-media-sound-manager Summary: Sound Manager library -Version: 0.3.37 +Version: 0.3.38 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/sound_manager_internal.c b/src/sound_manager_internal.c index 4c0a12a..a8c8859 100644 --- a/src/sound_manager_internal.c +++ b/src/sound_manager_internal.c @@ -19,6 +19,10 @@ #include #include +/* These variables will be removed when session features are deprecated. */ +extern int g_stream_info_count; +extern pthread_mutex_t g_stream_info_count_mutex; + int sound_manager_get_max_master_volume(int *max_level) { int ret = MM_ERROR_NONE; @@ -71,6 +75,8 @@ int sound_manager_create_stream_information_internal(sound_stream_type_internal_ SM_NULL_ARG_CHECK(stream_info); SM_NULL_ARG_CHECK(callback); + SM_ENTER_CRITICAL_SECTION_WITH_RETURN(&g_stream_info_count_mutex, MM_ERROR_SOUND_INTERNAL); + sound_stream_info_s *stream_h = malloc(sizeof(sound_stream_info_s)); if (!stream_h) { ret = MM_ERROR_OUT_OF_MEMORY; @@ -81,6 +87,7 @@ int sound_manager_create_stream_information_internal(sound_stream_type_internal_ ret = _make_pa_connection_and_register_focus(stream_h, callback, user_data); if (!ret) { *stream_info = (sound_stream_info_h)stream_h; + SM_REF_FOR_STREAM_INFO(g_stream_info_count, ret); LOGI("stream_h(%p), index(%u), user_cb(%p), ret(0x%x)", stream_h, stream_h->index, stream_h->user_cb, ret); } } @@ -88,6 +95,8 @@ int sound_manager_create_stream_information_internal(sound_stream_type_internal_ free(stream_h); } + SM_LEAVE_CRITICAL_SECTION(&g_stream_info_count_mutex); + return _convert_sound_manager_error_code(__func__, ret); } diff --git a/test/sound_manager_test.c b/test/sound_manager_test.c index 4104b8d..fb7f723 100644 --- a/test/sound_manager_test.c +++ b/test/sound_manager_test.c @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -1494,16 +1495,33 @@ gboolean input(GIOChannel *channel) return TRUE; } +/* it will be removed when session features are deprecated. */ +void signal_callback(mm_sound_signal_name_t signal, int value, void *user_data) +{ + g_print("*** signal callback is called: signal(%d), value(%d), user_data(%p)\n", signal, value, user_data); +} + int main(int argc, char *argv[]) { + unsigned int subscribe_id = 0; + int ret = MM_ERROR_NONE; GIOChannel *stdin_channel; stdin_channel = g_io_channel_unix_new(0); g_io_channel_set_flags(stdin_channel, G_IO_FLAG_NONBLOCK, NULL); g_io_add_watch(stdin_channel, G_IO_IN, (GIOFunc)input, NULL); g_loop = g_main_loop_new(NULL, 1); + /* subscribe a signal for convering session-focus */ + /* it will be removed when session features are deprecated. */ + if ((ret = mm_sound_subscribe_signal(MM_SOUND_SIGNAL_RELEASE_INTERNAL_FOCUS, &subscribe_id, signal_callback, NULL))) + g_print("failed to subscribe signal, ret(0x%x)\n", ret); + displaymenu(); g_main_loop_run(g_loop); + /* it will be removed when session features are deprecated. */ + if (subscribe_id) + mm_sound_unsubscribe_signal(subscribe_id); + return 0; }