diff options
author | soumith <soumith@fb.com> | 2014-11-05 02:09:23 +0300 |
---|---|---|
committer | soumith <soumith@fb.com> | 2014-11-05 02:09:23 +0300 |
commit | 4145fdde7d90d612c6943bdb4d11c58098829180 (patch) | |
tree | edafc1f276919df0de5e3271505227fe4cf47d1e /init.lua | |
parent | c57f62a16dd476cef115355b7e264b72b6ebfe01 (diff) |
addjob now is error-aware
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -41,7 +41,7 @@ function Threads:__call(N, ...) self.mainworker = Worker(N) self.threadworker = Worker(N) - + self.threads = {} for i=1,N do local L = C.luaL_newstate() @@ -81,7 +81,7 @@ function Threads:__call(N, ...) local ffi = require 'ffi' local sdl = require 'sdl2' require 'threads.worker' - + local function workerloop(data) local workers = ffi.cast('struct THWorker**', data) local mainworker = workers[0] @@ -132,6 +132,7 @@ function Threads:dojob() end function Threads:addjob(callback, endcallback, ...) -- endcallback is passed with returned values of callback + if #self.errors > 0 then self:synchronize() end -- if errors exist, sync immediately. local endcallbacks = self.endcallbacks -- first finish running jobs if any @@ -143,7 +144,7 @@ function Threads:addjob(callback, endcallback, ...) -- endcallback is passed wit local endcallbackid = table.getn(endcallbacks)+1 endcallbacks[endcallbackid] = endcallback or function() end endcallbacks.n = endcallbacks.n + 1 - + local func = function(...) local res = {pcall(callback, ...)} local status = table.remove(res, 1) |