]> git.sesse.net Git - vlc/commitdiff
lua: do delete stdin/stdout client
authorPierre Ynard <linkfanel@yahoo.fr>
Sun, 18 Mar 2012 03:06:36 +0000 (04:06 +0100)
committerPierre Ynard <linkfanel@yahoo.fr>
Sun, 18 Mar 2012 03:06:36 +0000 (04:06 +0100)
This fixes an endless loop when piping commands to stdin with echo
for example

share/lua/intf/modules/host.lua

index 0d299cbfe0e33e46af81049002dabf89b4ca47ea..0d345b80b2b042409ba05da4cc718045bea77fbc 100644 (file)
@@ -125,24 +125,24 @@ function host()
         return vlc.win.console_read()
     end
 
-    local function del_client( client, nostdioerror )
-        --client:send("Cleaning up.\r\n")
+    local function del_client( client )
+        if not clients[client] then
+            vlc.msg.err("couldn't find client to remove.")
+            return
+        end
+
         if client.type == client_type.stdio then
-            if not nostdioerror then
-                client:send( "Cannot delete stdin/stdout client.\n" )
-            end
-        elseif clients[client] then
-            if client.type == client_type.net
-            or client.type == client_type.telnet then
-                if client.wfd ~= client.rfd then
-                    vlc.net.close( client.rfd )
-                end
-                vlc.net.close( client.wfd )
+            h:broadcast("Shutting down.\r\n")
+            vlc.msg.info("Requested shutdown.")
+            vlc.misc.quit()
+        elseif client.type == client_type.net
+        or client.type == client_type.telnet then
+            if client.wfd ~= client.rfd then
+                vlc.net.close( client.rfd )
             end
-            clients[client] = nil
-        else
-            vlc.msg.err("couldn't find client to remove.")
+            vlc.net.close( client.wfd )
         end
+        clients[client] = nil
     end
 
     local function switch_status( client, s )
@@ -318,7 +318,9 @@ function host()
 
     local function destructor( h )
         for _,client in pairs(clients) do
-            client:del(true)
+            if client.type ~= client_type.stdio then
+                client:del()
+            end
         end
     end