diff options
author | Soumith Chintala <soumith@gmail.com> | 2015-09-18 21:31:46 +0300 |
---|---|---|
committer | Soumith Chintala <soumith@gmail.com> | 2015-09-18 21:31:46 +0300 |
commit | 7c5ff00fa98825cd477eb767fb7dc0832592f61c (patch) | |
tree | 6243ba6242bf52bfaf1fe7b192c54b269285aaca | |
parent | 1153921a624523ebfd11096b384ae193e83bc1cd (diff) | |
parent | bad65805d5fca7d81f3e4e0062ac95915f556179 (diff) |
Merge pull request #27 from adamlerer/tb_return
Fix return values with xpcall
-rw-r--r-- | test/test-traceback.lua | 9 | ||||
-rw-r--r-- | threads.lua | 4 |
2 files changed, 11 insertions, 2 deletions
diff --git a/test/test-traceback.lua b/test/test-traceback.lua index db50624..98bb815 100644 --- a/test/test-traceback.lua +++ b/test/test-traceback.lua @@ -17,3 +17,12 @@ my_threads:addjob(function() ok, res = pcall(my_threads.synchronize, my_threads) assert(ok == false) assert(res:find("in function 'evil_func'")) + +my_threads:addjob(function() + return 10 + end, + function(x) + assert(x == 10) + end) + +my_threads:synchronize() diff --git a/threads.lua b/threads.lua index 3bef540..67145f2 100644 --- a/threads.lua +++ b/threads.lua @@ -169,7 +169,7 @@ function Threads:dojob() local callstatus, args, endcallbackid, threadid = self.mainqueue:dojob() if callstatus then local endcallstatus, msg = xpcall( - function() endcallbacks[endcallbackid](_unpack(args)) end, + function() return endcallbacks[endcallbackid](_unpack(args)) end, debug.traceback) if not endcallstatus then table.insert(self.errors, string.format('[thread %d endcallback] %s', threadid, msg)) @@ -231,7 +231,7 @@ function Threads:addjob(...) -- endcallback is passed with returned values of ca xpcall( function() local _unpack = unpack or table.unpack - callback(_unpack(args)) + return callback(_unpack(args)) end, debug.traceback)} local status = table.remove(res, 1) |