Correction: ecore timer must be called in main loop
authorprince <prince.dubey@samsung.com>
Tue, 19 Feb 2013 06:02:50 +0000 (11:32 +0530)
committerprince <prince.dubey@samsung.com>
Tue, 19 Feb 2013 06:02:50 +0000 (11:32 +0530)
Change-Id: I22b7d58c3c0c453cd9f96f08e0b94c610766f74e

src/tizen_sound_player/tizen_sound_player.c

index 11ea947..e034379 100644 (file)
@@ -345,15 +345,30 @@ _remix_mm_handle_close(void *data)
    return ECORE_CALLBACK_CANCEL;
 }
 
-static int
-remix_player_flush (RemixEnv *env, RemixBase *base)
+static void *
+remix_player_timer_add(void *data)
 {
-   RemixPlayerData *player_data = remix_base_get_instance_data(env, base);
+   RemixPlayerData *player_data = data;
 
    if (player_data->timeout) ecore_timer_del(player_data->timeout);
    player_data->timeout = ecore_timer_add(TIMEOUT_FOR_MM_HANDLER,
                                           _remix_mm_handle_close, player_data);
 
+   return NULL;
+}
+
+static int
+remix_player_flush (RemixEnv *env, RemixBase *base)
+{
+   RemixPlayerData *player_data = remix_base_get_instance_data(env, base);
+
+   if (!player_data) return;
+
+   //ecore timer is not thread safe, must be called in main thread
+   //the below call should not be blocking
+   ecore_main_loop_thread_safe_call_async
+                   (remix_player_timer_add, player_data);
+
    if (player_data->handle) return 0;
 
    player_data->old_buffer_size = player_data->buffer_size;