]> git.sesse.net Git - vlc/commitdiff
Lua: add sockets to extensions (fixes #9495)
authorRémi Denis-Courmont <remi@remlab.net>
Mon, 24 Mar 2014 17:54:13 +0000 (19:54 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Mon, 24 Mar 2014 17:55:14 +0000 (19:55 +0200)
modules/lua/extension.c
modules/lua/extension.h
modules/lua/extension_thread.c
share/lua/README.txt

index f1efb873ac9e80c39a047de8993fd615157cb649..ed9ccd96e7e01c5288080db20cce116add29b975 100644 (file)
@@ -650,6 +650,8 @@ int lua_ExtensionDeactivate( extensions_manager_t *p_mgr, extension_t *p_ext )
     if( !p_ext->p_sys->L )
         return VLC_SUCCESS;
 
+    vlclua_fd_interrupt( &p_ext->p_sys->dtable );
+
     // Unset and release input objects
     if( p_ext->p_sys->p_input )
     {
@@ -666,6 +668,7 @@ int lua_ExtensionDeactivate( extensions_manager_t *p_mgr, extension_t *p_ext )
     int i_ret = lua_ExecuteFunction( p_mgr, p_ext, "deactivate", LUA_END );
 
     /* Clear Lua State */
+    vlclua_fd_cleanup( &p_ext->p_sys->dtable );
     lua_close( p_ext->p_sys->L );
     p_ext->p_sys->L = NULL;
 
@@ -824,7 +827,11 @@ static lua_State* GetLuaState( extensions_manager_t *p_mgr,
             luaopen_dialog( L, p_ext );
             luaopen_input( L );
             luaopen_msg( L );
-            luaopen_net_generic( L );
+            if( vlclua_fd_init( L, &p_ext->p_sys->dtable ) )
+            {
+                lua_close( L );
+                return NULL;
+            }
             luaopen_object( L );
             luaopen_osd( L );
             luaopen_playlist( L );
@@ -859,6 +866,7 @@ static lua_State* GetLuaState( extensions_manager_t *p_mgr,
                 {
                     msg_Warn( p_mgr, "Error while setting the module "
                               "search path for %s", p_ext->psz_name );
+                    vlclua_fd_cleanup( &p_ext->p_sys->dtable );
                     lua_close( L );
                     return NULL;
                 }
@@ -868,6 +876,7 @@ static lua_State* GetLuaState( extensions_manager_t *p_mgr,
             {
                 msg_Warn( p_mgr, "Error loading script %s: %s", p_ext->psz_name,
                           lua_tostring( L, lua_gettop( L ) ) );
+                vlclua_fd_cleanup( &p_ext->p_sys->dtable );
                 lua_close( L );
                 return NULL;
             }
@@ -1044,7 +1053,10 @@ static int TriggerExtension( extensions_manager_t *p_mgr,
 
     /* Close lua state for trigger-only extensions */
     if( p_ext->p_sys->L )
+    {
+        vlclua_fd_cleanup( &p_ext->p_sys->dtable );
         lua_close( p_ext->p_sys->L );
+    }
     p_ext->p_sys->L = NULL;
 
     return i_ret;
index 05776729ca5686b46c7535dd0e5c24c95b6a634c..69f1705e03afb7416ef644ac1011adaccec9210d 100644 (file)
@@ -69,6 +69,8 @@ struct extension_sys_t
     /* Lua specific */
     lua_State *L;
 
+    vlclua_dtable_t dtable;
+
     /* Thread data */
     vlc_thread_t thread;
     vlc_mutex_t command_lock;
index 6cf285eee150c9282a08bad7247f8bbd0064cbca..a643b6ace2705e0accb41c65aff9364e4c8e5ccf 100644 (file)
@@ -28,6 +28,7 @@
 /* I don't want to include lua headers here */
 typedef struct lua_State lua_State;
 
+#include "vlc.h"
 #include "extension.h"
 #include "assert.h"
 
index c29cc4afb3d2a414bc50d8a2e3ed87924eff1364..eb6a8b1135f955676bdaf43a987c8800d49ebc86 100644 (file)
@@ -160,7 +160,7 @@ misc.quit(): Quit VLC.
 Net
 ---
 ----------------------------------------------------------------
-/!\ NB: this namespace is ONLY usable for interfaces.
+/!\ NB: this namespace is ONLY usable for interfaces and extensions.
 ---
 ----------------------------------------------------------------
 net.url_parse( url, [option delimiter] ): Parse URL. Returns a table with