summaryrefslogtreecommitdiff
path: root/src/mm_radio_priv_hal.c
diff options
context:
space:
mode:
authorGilbok Lee <gilbok.lee@samsung.com>2018-08-20 16:56:46 +0900
committerGilbok Lee <gilbok.lee@samsung.com>2018-08-21 15:57:19 +0900
commit849b12262d04198843c060e808a3b9275dc04a18 (patch)
treebfd08ba0d338dcd2dcf1b1d1f3ae3a54a524177a /src/mm_radio_priv_hal.c
parentd4e48794c3077d6b0838762edabf94b4a29c7e3d (diff)
downloadlibmm-radio-849b12262d04198843c060e808a3b9275dc04a18.tar.gz
libmm-radio-849b12262d04198843c060e808a3b9275dc04a18.tar.bz2
libmm-radio-849b12262d04198843c060e808a3b9275dc04a18.zip
Radio device will be close, if radio device is opened when unrealize
[Version] 0.2.42 [Profile] Mobile, Wearable [Issue Type] Fix bugs Change-Id: I92e7068524b846380517c1abda2da9b391846daa
Diffstat (limited to 'src/mm_radio_priv_hal.c')
-rw-r--r--src/mm_radio_priv_hal.c70
1 files changed, 43 insertions, 27 deletions
diff --git a/src/mm_radio_priv_hal.c b/src/mm_radio_priv_hal.c
index 24604b5..b11bc62 100644
--- a/src/mm_radio_priv_hal.c
+++ b/src/mm_radio_priv_hal.c
@@ -134,7 +134,7 @@ static int __resource_release_cb(mm_resource_manager_h rm,
mm_resource_manager_res_h res, void *user_data);
static void __mmradio_msg_thread(mm_radio_t *radio);
static void __mmradio_msg_push(mm_radio_t *radio, MMRadioMsgTypes msg_type, int msg_data);
-
+static void __mmradio_close_radio_device(mm_radio_t *radio);
typedef void (*thread_function)(mm_radio_t *);
thread_function __mmradio_thread_function[] = {
&__mmradio_msg_thread,
@@ -751,7 +751,6 @@ int _mmradio_stop(mm_radio_t *radio)
if (ret != MM_RESOURCE_MANAGER_ERROR_NONE)
MMRADIO_LOG_ERROR("resource manager commit fail");
}
-
radio->is_ready = false;
}
@@ -935,7 +934,6 @@ void __mmradio_scan_thread(mm_radio_t *radio)
{
int ret = MM_ERROR_NONE;
int prev_freq = 0;
-
MMRadioThread_t *p_thread = NULL;
MMRADIO_LOG_FENTER();
@@ -1068,29 +1066,7 @@ FINISHED_ERR:
MMRADIO_SET_STATE(radio, MM_RADIO_STATE_PLAYING);
} else {
/* close radio device here !!!! */
- if (radio->is_ready) {
- ret = radio_hal_close(radio->hal_inf);
- if (ret)
- __convert_error_code(ret, (char *)__FUNCTION__);
-
- ret = radio_hal_unprepare(radio->hal_inf);
- if (ret)
- __convert_error_code(ret, (char *)__FUNCTION__);
-
- if (!radio->interrupted_by_resource_conflict && /* is being released */
- radio->radio_resource != NULL) {
- ret = mm_resource_manager_mark_for_release(radio->resource_manager,
- radio->radio_resource);
- radio->radio_resource = NULL;
- if (ret != MM_RESOURCE_MANAGER_ERROR_NONE)
- MMRADIO_LOG_ERROR("failed to mark resource for release, ret(0x%x)", ret);
- }
-
- ret = mm_resource_manager_commit(radio->resource_manager);
- if (ret != MM_RESOURCE_MANAGER_ERROR_NONE)
- MMRADIO_LOG_ERROR("resource manager commit fail");
- radio->is_ready = false;
- }
+ __mmradio_close_radio_device(radio);
MMRADIO_SET_STATE(radio, MM_RADIO_STATE_READY);
}
@@ -1107,6 +1083,9 @@ FINISHED_ERR:
}
EXIT:
+ /* close radio device here !!!! */
+ __mmradio_close_radio_device(radio);
+
p_thread->is_running = false;
MMRADIO_THREAD_UNLOCK(p_thread);
@@ -1806,6 +1785,7 @@ void __mmradio_msg_thread(mm_radio_t *radio)
{
mm_radio_msg_t *msg = NULL;
+ mm_radio_msg_t *msg_pop = NULL;
MMRadioThread_t *p_thread = NULL;
MMRADIO_LOG_FENTER();
@@ -1834,7 +1814,6 @@ void __mmradio_msg_thread(mm_radio_t *radio)
switch (msg->msg_type) {
case MM_RADIO_MSG_DESTROY:
MMRADIO_LOG_INFO("get destroy msg. pop all event to finish this thread");
- mm_radio_msg_t *msg_pop = NULL;
while ((msg_pop = (mm_radio_msg_t *)g_async_queue_try_pop(radio->msg_queue))) {
if (msg_pop != NULL) {
MMRADIO_LOG_DEBUG("drop this msg type: %d", msg_pop->msg_type);
@@ -1883,3 +1862,40 @@ void __mmradio_msg_thread(mm_radio_t *radio)
MMRADIO_LOG_FLEAVE();
pthread_exit(NULL);
}
+
+static void __mmradio_close_radio_device(mm_radio_t *radio)
+{
+ int ret = MM_ERROR_NONE;
+
+ MMRADIO_LOG_FENTER();
+ MMRADIO_CHECK_INSTANCE_RETURN_VOID(radio);
+
+ if (!radio->is_ready) {
+ MMRADIO_LOG_DEBUG("radio device is already closed");
+ return;
+ }
+
+ ret = radio_hal_close(radio->hal_inf);
+ if (ret)
+ __convert_error_code(ret, (char *)__FUNCTION__);
+
+ ret = radio_hal_unprepare(radio->hal_inf);
+ if (ret)
+ __convert_error_code(ret, (char *)__FUNCTION__);
+
+ if (!radio->interrupted_by_resource_conflict && /* is being released */
+ radio->radio_resource != NULL) {
+ ret = mm_resource_manager_mark_for_release(radio->resource_manager,
+ radio->radio_resource);
+ radio->radio_resource = NULL;
+ if (ret != MM_RESOURCE_MANAGER_ERROR_NONE)
+ MMRADIO_LOG_ERROR("failed to mark resource for release, ret(0x%x)", ret);
+ }
+
+ ret = mm_resource_manager_commit(radio->resource_manager);
+ if (ret != MM_RESOURCE_MANAGER_ERROR_NONE)
+ MMRADIO_LOG_ERROR("resource manager commit fail");
+
+ radio->is_ready = false;
+
+} \ No newline at end of file