Fix crash on emulator 87/276987/1 accepted/tizen_6.5_unified tizen_6.5 accepted/tizen/6.5/unified/20220703.214207 submit/tizen_6.5/20220630.011810
authorGilbok Lee <gilbok.lee@samsung.com>
Wed, 29 Jun 2022 02:31:20 +0000 (11:31 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Wed, 29 Jun 2022 02:31:20 +0000 (11:31 +0900)
- When radio destroy during scanning, the radio pipeline can be freed

[Version] 0.2.50
[Issue Type] Fix bugs

Change-Id: I39f46053696406ec4eea3938ef254d1d76652c7a

packaging/libmm-radio.spec
src/mm_radio_priv_emulator.c

index de31e23f03ea47c95a83a2ec493775bc21a96a4c..980b195c2a212f58851c4e68f8fd03f2f870dcf0 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-radio
 Summary:    Multimedia Framework Radio Library
-Version:    0.2.49
+Version:    0.2.50
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0
index 62dc09bf49dff72d22536a1156d60d616ce0ad1b..d7f6cd1968d8ebaba817f3302b4ec377d47bfd9a 100644 (file)
@@ -326,8 +326,15 @@ int _mmradio_unrealize(mm_radio_t * radio)
        MMRADIO_CHECK_INSTANCE(radio);
        MMRADIO_CHECK_STATE_RETURN_IF_FAIL(radio, MMRADIO_COMMAND_UNREALIZE);
 
-       /*  if( _mmradio_mute(radio) != MM_ERROR_NONE) */
-       /*      return MM_ERROR_RADIO_NOT_INITIALIZED; */
+       /*Finish if there are scans*/
+       ret = _mmradio_stop_scan(radio);
+       if (ret != MM_ERROR_NONE)
+               MMRADIO_LOG_WARNING("failed to stop radio scan");
+
+       /*Stop radio if started*/
+       ret = _mmradio_stop(radio);
+       if (ret != MM_ERROR_NONE)
+               MMRADIO_LOG_WARNING("failed to stop radio");
 
        /* close radio device here !!!! */
        if (radio->radio_fd >= 0)
@@ -356,6 +363,7 @@ int _mmradio_destroy(mm_radio_t * radio)
        MMRADIO_CHECK_STATE_RETURN_IF_FAIL(radio, MMRADIO_COMMAND_DESTROY);
 
        _mmradio_unrealize(radio);
+
        /* destroy mutex and thread */
        __mmradio_destroy_threads(radio);
 
@@ -376,6 +384,8 @@ int _mmradio_destroy(mm_radio_t * radio)
 /* unit should be KHz */
 int _mmradio_set_frequency(mm_radio_t * radio, int freq)
 {
+
+       int val = 0;
        MMRADIO_LOG_FENTER();
 
        MMRADIO_CHECK_INSTANCE(radio);
@@ -396,12 +406,10 @@ int _mmradio_set_frequency(mm_radio_t * radio, int freq)
        }
 
        radio->freq = freq;
+       val = __mmradio_get_wave_num(radio);
 
-       if (radio->pipeline) {
-               int val = 0;
-               val = __mmradio_get_wave_num(radio);
+       if (radio->pipeline && radio->pipeline->audiosrc)
                g_object_set(radio->pipeline->audiosrc, "wave", val, NULL);
-       }
 
        MMRADIO_LOG_FLEAVE();
 
@@ -663,7 +671,6 @@ int _mmradio_realize_pipeline(mm_radio_t * radio)
 
        radio->pipeline->audiosrc = gst_element_factory_make("audiotestsrc", "fm audio src");
        radio->pipeline->converter = gst_element_factory_make("audioconvert", "audioconvert");
-       radio->pipeline->audiosink = gst_element_factory_make("pulsesink", "audio sink");
        radio->pipeline->volume = gst_element_factory_make("volume", "audiovolume");
        radio->pipeline->audiosink = gst_element_factory_make("pulsesink", "audio sink");