Kaynağa Gözat

Fix: recreate dead coroutines each loop

Luis Rosales 2 ay önce
ebeveyn
işleme
7cbe04dfc8
1 değiştirilmiş dosya ile 8 ekleme ve 0 silme
  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)