aboutsummaryrefslogtreecommitdiff
path: root/src/lanes.lua
diff options
context:
space:
mode:
authorBenoit Germain <bnt period germain arrobase gmail period com>2014-01-22 12:28:45 +0100
committerBenoit Germain <bnt period germain arrobase gmail period com>2014-01-22 12:28:45 +0100
commit9808ae3e21ac812ef705a7c1a0b10f49825023c5 (patch)
treee5cebe59b603645fa1fdedd42f56a4d243e8783d /src/lanes.lua
parent57ccc40847716069053a68e9d6079355dd5a1795 (diff)
downloadlanes-9808ae3e21ac812ef705a7c1a0b10f49825023c5.tar.gz
lanes-9808ae3e21ac812ef705a7c1a0b10f49825023c5.tar.bz2
lanes-9808ae3e21ac812ef705a7c1a0b10f49825023c5.zip
new lane launcher option gc_cb
* bumped version to 3.8.2 * new lane launcher option gc_cb to set a callback that is invoked when a lane is garbage collected * Fix more invalid memory accesses when fetching the name of a joined lane with lanes:threads() (because its lua_State is closed)
Diffstat (limited to 'src/lanes.lua')
-rw-r--r--src/lanes.lua14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/lanes.lua b/src/lanes.lua
index 9a0287d..1286099 100644
--- a/src/lanes.lua
+++ b/src/lanes.lua
@@ -196,7 +196,10 @@ end
196-- 196--
197-- .globals: table of globals to set for a new thread (passed by value) 197-- .globals: table of globals to set for a new thread (passed by value)
198-- 198--
199-- .required: table of packages to require 199-- .required: table of packages to require
200--
201-- .gc_cb: function called when the lane handle is collected
202--
200-- ... (more options may be introduced later) ... 203-- ... (more options may be introduced later) ...
201-- 204--
202-- Calling with a function parameter ('lane_func') ends the string/table 205-- Calling with a function parameter ('lane_func') ends the string/table
@@ -272,10 +275,11 @@ local function gen( ... )
272 end 275 end
273 end 276 end
274 277
275 local prio, cs, g_tbl, package_tbl, required 278 local prio, cs, g_tbl, package_tbl, required, gc_cb
276 279
277 for k,v in pairs(opt) do 280 for k,v in pairs(opt) do
278 if k=="priority" then prio= v 281 if k == "priority" then
282 prio = (type( v) == "number") and v or error( "Bad 'prio' option: expecting number, got " .. type( v), lev)
279 elseif k=="cancelstep" then 283 elseif k=="cancelstep" then
280 cs = (v==true) and 100 or 284 cs = (v==true) and 100 or
281 (v==false) and 0 or 285 (v==false) and 0 or
@@ -286,6 +290,8 @@ local function gen( ... )
286 package_tbl = (type( v) == "table") and v or error( "Bad package: " .. tostring( v), lev) 290 package_tbl = (type( v) == "table") and v or error( "Bad package: " .. tostring( v), lev)
287 elseif k=="required" then 291 elseif k=="required" then
288 required= (type( v) == "table") and v or error( "Bad 'required' option: expecting table, got " .. type( v), lev) 292 required= (type( v) == "table") and v or error( "Bad 'required' option: expecting table, got " .. type( v), lev)
293 elseif k == "gc_cb" then
294 gc_cb = (type( v) == "function") and v or error( "Bad 'gc_cb' option: expecting function, got " .. type( v), lev)
289 --.. 295 --..
290 elseif k==1 then error( "unkeyed option: ".. tostring(v), lev ) 296 elseif k==1 then error( "unkeyed option: ".. tostring(v), lev )
291 else error( "Bad option: ".. tostring(k), lev ) 297 else error( "Bad option: ".. tostring(k), lev )
@@ -296,7 +302,7 @@ local function gen( ... )
296 -- Lane generator 302 -- Lane generator
297 -- 303 --
298 return function(...) 304 return function(...)
299 return thread_new( func, libs, cs, prio, g_tbl, package_tbl, required, ...) -- args 305 return thread_new( func, libs, cs, prio, g_tbl, package_tbl, required, gc_cb, ...) -- args
300 end 306 end
301end 307end
302 308