[vlc-commits] lua: Properly support reactivation of the extension

Hugo Beauzée-Luyssen git at videolan.org
Thu Mar 30 13:56:33 CEST 2017


vlc | branch: master | Hugo Beauzée-Luyssen <hugo at beauzee.fr> | Wed Mar 29 16:57:13 2017 +0200| [6a627ce841e9f9d8eb4bc921963b3b77e9ab99ca] | committer: Hugo Beauzée-Luyssen

lua: Properly support reactivation of the extension

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6a627ce841e9f9d8eb4bc921963b3b77e9ab99ca
---

 modules/lua/extension.c        | 20 ++++++++++++++++----
 modules/lua/extension_thread.c | 28 ++++++++++++++++++++--------
 2 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/modules/lua/extension.c b/modules/lua/extension.c
index e6612e9..0a7d5a3 100644
--- a/modules/lua/extension.c
+++ b/modules/lua/extension.c
@@ -140,11 +140,23 @@ void Close_Extension( vlc_object_t *p_this )
             break;
 
         vlc_mutex_lock( &p_ext->p_sys->command_lock );
-        bool b_activated = p_ext->p_sys->b_activated;
-        vlc_mutex_unlock( &p_ext->p_sys->command_lock );
-
-        if( b_activated == true )
+        if( p_ext->p_sys->b_activated == true )
+        {
+            p_ext->p_sys->b_exiting = true;
+            vlc_mutex_unlock( &p_ext->p_sys->command_lock );
+            // DeactivateCommand will signal the wait condition.
             Deactivate( p_mgr, p_ext );
+        }
+        else
+        {
+            if ( p_ext->p_sys->L != NULL )
+                vlclua_fd_interrupt( &p_ext->p_sys->dtable );
+            // however here we need to manually signal the wait cond, since no command is queued.
+            p_ext->p_sys->b_exiting = true;
+            vlc_cond_signal( &p_ext->p_sys->wait );
+            vlc_mutex_unlock( &p_ext->p_sys->command_lock );
+        }
+
 
         if( p_ext->p_sys->b_thread_running == true )
             vlc_join( p_ext->p_sys->thread, NULL );
diff --git a/modules/lua/extension_thread.c b/modules/lua/extension_thread.c
index ef66edc..ed8e431 100644
--- a/modules/lua/extension_thread.c
+++ b/modules/lua/extension_thread.c
@@ -52,17 +52,30 @@ int Activate( extensions_manager_t *p_mgr, extension_t *p_ext )
     struct extension_sys_t *p_sys = p_ext->p_sys;
     assert( p_sys != NULL );
 
-    msg_Dbg( p_mgr, "Activating extension '%s'", p_ext->psz_title );
+    vlc_mutex_lock( &p_sys->command_lock );
+    if ( p_sys->b_activated == false )
+    {
+        /* Prepare first command */
+        assert(p_sys->command == NULL);
+        p_sys->command = calloc( 1, sizeof( struct command_t ) );
+        if( !p_sys->command )
+        {
+            vlc_mutex_unlock( &p_sys->command_lock );
+            return VLC_ENOMEM;
+        }
+        p_sys->command->i_command = CMD_ACTIVATE; /* No params */
+        if (p_sys->b_thread_running == true)
+        {
+            msg_Dbg( p_mgr, "Reactivating extension %s", p_ext->psz_title);
+            vlc_cond_signal( &p_sys->wait );
+        }
+    }
+    vlc_mutex_unlock( &p_sys->command_lock );
 
     if (p_sys->b_thread_running == true)
         return VLC_SUCCESS;
 
-    /* Prepare first command */
-    p_sys->command = calloc( 1, sizeof( struct command_t ) );
-    if( !p_sys->command )
-        return VLC_ENOMEM;
-    p_sys->command->i_command = CMD_ACTIVATE; /* No params */
-
+    msg_Dbg( p_mgr, "Activating extension '%s'", p_ext->psz_title );
     /* Start thread */
     p_sys->b_exiting = false;
     p_sys->b_thread_running = true;
@@ -293,7 +306,6 @@ static void* Run( void *data )
                                   p_ext->psz_title );
                     }
                     vlc_mutex_lock( &p_ext->p_sys->command_lock );
-                    p_ext->p_sys->b_exiting = true;
                     p_ext->p_sys->b_activated = false;
                     vlc_mutex_unlock( &p_ext->p_sys->command_lock );
                     break;



More information about the vlc-commits mailing list