summaryrefslogtreecommitdiff
path: root/src/mm_radio_priv_hal.c
diff options
context:
space:
mode:
authorGilbok Lee <gilbok.lee@samsung.com>2017-04-27 17:57:32 +0900
committerGilbok Lee <gilbok.lee@samsung.com>2017-04-28 19:15:13 +0900
commit82239203347f19d3a772faff4f6f2e1fd56550c7 (patch)
tree708d37300e0720422d606bb75f4e7616fc6c68d1 /src/mm_radio_priv_hal.c
parent42e03880d935d628608776e138915c23cbe6f780 (diff)
downloadlibmm-radio-82239203347f19d3a772faff4f6f2e1fd56550c7.tar.gz
libmm-radio-82239203347f19d3a772faff4f6f2e1fd56550c7.tar.bz2
libmm-radio-82239203347f19d3a772faff4f6f2e1fd56550c7.zip
unnecessary resource_manager_release in _mmradio_stop function. [Version] 0.2.26 [Profile] Mobile, Wearable [Issue Type] Fix bugs Change-Id: I3d6de3493b409a2c8912819df6977bcbea1cd3bb
Diffstat (limited to 'src/mm_radio_priv_hal.c')
-rw-r--r--src/mm_radio_priv_hal.c73
1 files changed, 51 insertions, 22 deletions
diff --git a/src/mm_radio_priv_hal.c b/src/mm_radio_priv_hal.c
index f4a92e9..5fc7d30 100644
--- a/src/mm_radio_priv_hal.c
+++ b/src/mm_radio_priv_hal.c
@@ -270,12 +270,6 @@ int _mmradio_realize(mm_radio_t *radio)
ret = _mmradio_apply_region(radio, region, update);
- ret = mmradio_resource_manager_prepare(&radio->resource_manager, MM_RADIO_RESOURCE_TYPE_RADIO);
- if (ret != MM_ERROR_NONE) {
- MMRADIO_LOG_ERROR("resource manager prepare fail");
- return MM_ERROR_RADIO_INTERNAL;
- }
-
#ifdef TIZEN_FEATURE_SOUND_VSTREAM
ret = sound_manager_create_stream_information_internal(SOUND_STREAM_TYPE_RADIO, NULL, radio, &radio->stream_info);
if (ret != MM_ERROR_NONE) {
@@ -345,9 +339,6 @@ int _mmradio_unrealize(mm_radio_t *radio)
sound_manager_destroy_virtual_stream(radio->vstream);
sound_manager_destroy_stream_information(radio->stream_info);
#endif
- mmradio_resource_manager_unprepare(&radio->resource_manager);
- if (ret != MM_ERROR_NONE)
- MMRADIO_LOG_ERROR("resource manager unprepare fail");
pthread_mutex_destroy(&radio->seek_cancel_mutex);
@@ -565,9 +556,15 @@ int _mmradio_start(mm_radio_t *radio)
#endif
if (!radio->is_ready) {
+ ret = mmradio_resource_manager_prepare(&radio->resource_manager, MM_RADIO_RESOURCE_TYPE_RADIO);
+ if (ret != MM_ERROR_NONE) {
+ MMRADIO_LOG_ERROR("resource manager prepare fail");
+ return MM_ERROR_RADIO_INTERNAL;
+ }
ret = mmradio_resource_manager_acquire(&radio->resource_manager);
if (ret != MM_ERROR_NONE) {
MMRADIO_LOG_ERROR("failed to acquire resource manager");
+ mmradio_resource_manager_unprepare(&radio->resource_manager);
return ret;
}
ret = radio_hal_prepare(radio->hal_inf);
@@ -644,6 +641,7 @@ error2:
int _mmradio_stop(mm_radio_t *radio)
{
int ret = MM_ERROR_NONE;
+ mm_radio_resource_state_e resource_state = MM_RADIO_RESOURCE_STATE_NONE;
MMRADIO_LOG_FENTER();
@@ -688,10 +686,23 @@ int _mmradio_stop(mm_radio_t *radio)
radio->is_ready = FALSE;
- ret = mmradio_resource_manager_release(&radio->resource_manager);
- if (ret != MM_ERROR_NONE) {
- MMRADIO_LOG_ERROR("failed to release resource");
- return ret;
+ if (!radio->resource_manager.by_rm_cb && /* is being released */
+ mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
+ if (resource_state == MM_RADIO_RESOURCE_STATE_ACQUIRED) {
+ ret = mmradio_resource_manager_release(&radio->resource_manager);
+ if (ret != MM_ERROR_NONE) {
+ MMRADIO_LOG_ERROR("failed to release resource, ret(0x%x)", ret);
+ return ret;
+ }
+ }
+ }
+
+ if (mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
+ if (resource_state == MM_RADIO_RESOURCE_STATE_PREPARED) {
+ ret = mmradio_resource_manager_unprepare(&radio->resource_manager);
+ if (ret != MM_ERROR_NONE)
+ MMRADIO_LOG_ERROR("resource manager unprepare fail");
+ }
}
#ifdef TIZEN_FEATURE_SOUND_FOCUS
@@ -811,9 +822,15 @@ int _mmradio_start_scan(mm_radio_t *radio)
radio->stop_scan = false;
if (!radio->is_ready) {
+ ret = mmradio_resource_manager_prepare(&radio->resource_manager, MM_RADIO_RESOURCE_TYPE_RADIO);
+ if (ret != MM_ERROR_NONE) {
+ MMRADIO_LOG_ERROR("resource manager prepare fail");
+ return MM_ERROR_RADIO_INTERNAL;
+ }
ret = mmradio_resource_manager_acquire(&radio->resource_manager);
if (ret != MM_ERROR_NONE) {
MMRADIO_LOG_ERROR("failed to acquire resource manager");
+ mmradio_resource_manager_unprepare(&radio->resource_manager);
return ret;
}
@@ -913,6 +930,7 @@ void __mmradio_scan_thread(mm_radio_t *radio)
{
int ret = MM_ERROR_NONE;
int prev_freq = 0;
+ mm_radio_resource_state_e resource_state = MM_RADIO_RESOURCE_STATE_NONE;
MMRADIO_LOG_FENTER();
MMRADIO_CHECK_INSTANCE_RETURN_VOID(radio);
@@ -1029,9 +1047,22 @@ FINISHED_ERR:
radio->is_ready = FALSE;
- ret = mmradio_resource_manager_release(&radio->resource_manager);
- if (ret != MM_ERROR_NONE)
- MMRADIO_LOG_ERROR("failed to release resource");
+ if (!radio->resource_manager.by_rm_cb && /* is being released */
+ mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
+ if (resource_state == MM_RADIO_RESOURCE_STATE_ACQUIRED) {
+ ret = mmradio_resource_manager_release(&radio->resource_manager);
+ if (ret != MM_ERROR_NONE)
+ MMRADIO_LOG_ERROR("failed to release resource, ret(0x%x)", ret);
+ }
+ }
+
+ if (mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
+ if (resource_state == MM_RADIO_RESOURCE_STATE_PREPARED) {
+ ret = mmradio_resource_manager_unprepare(&radio->resource_manager);
+ if (ret != MM_ERROR_NONE)
+ MMRADIO_LOG_ERROR("resource manager unprepare fail");
+ }
+ }
MMRADIO_SET_STATE(radio, MM_RADIO_STATE_READY);
}
@@ -1344,6 +1375,7 @@ static bool __mmradio_set_state(mm_radio_t *radio, int new_state)
radio->current_state = new_state;
/* fill message param */
+ msg.union_type = MM_MSG_UNION_STATE;
msg.state.previous = radio->old_state;
msg.state.current = radio->current_state;
@@ -1351,13 +1383,11 @@ static bool __mmradio_set_state(mm_radio_t *radio, int new_state)
/* post message to application */
if (radio->sound_focus.by_focus_cb) {
msg_type = MM_MESSAGE_STATE_INTERRUPTED;
- msg.union_type = MM_MSG_UNION_CODE;
- msg.code = radio->sound_focus.event_src;
+ msg.state.code = radio->sound_focus.event_src;
MMRADIO_POST_MSG(radio, msg_type, &msg);
} else if (radio->resource_manager.by_rm_cb) {
msg_type = MM_MESSAGE_STATE_INTERRUPTED;
- msg.union_type = MM_MSG_UNION_CODE;
- msg.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
+ msg.state.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
MMRADIO_POST_MSG(radio, msg_type, &msg);
} else {
msg_type = MM_MESSAGE_STATE_CHANGED;
@@ -1366,8 +1396,7 @@ static bool __mmradio_set_state(mm_radio_t *radio, int new_state)
#else
if (radio->resource_manager.by_rm_cb) {
msg_type = MM_MESSAGE_STATE_INTERRUPTED;
- msg.union_type = MM_MSG_UNION_CODE;
- msg.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
+ msg.state.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
MMRADIO_POST_MSG(radio, msg_type, &msg);
} else {
msg_type = MM_MESSAGE_STATE_CHANGED;