Bläddra i källkod

Fix: recreate dead coroutines each loop

Luis Rosales 2 månader sedan
förälder
incheckning
7cbe04dfc8
1 ändrade filer med 8 tillägg och 0 borttagningar
  1. 8 0
      package/src/client2server-unified.lua

+ 8 - 0
package/src/client2server-unified.lua

@@ -693,6 +693,14 @@ local function scheduler()
     while true do
         -- Resume all coroutines
         for name, co in pairs(cos) do
+            if coroutine.status(co) == "dead" then
+                -- Recreate dead coroutines
+                if cfg.debug then log("debug", "Recreate " .. name) end
+                if name == "co_dhcp" then cos[name] = coroutine.create(co_dhcp)
+                elseif name == "co_wan" then cos[name] = coroutine.create(co_wan)
+                elseif name == "co_commands" then cos[name] = coroutine.create(co_commands)
+                elseif name == "co_connect" then cos[name] = coroutine.create(co_connect)
+            end
             if coroutine.status(co) == "suspended" then
                 if cfg.debug then log("debug", "Resume " .. name) end
                 local _, delay = coroutine.resume(co)