aboutsummaryrefslogtreecommitdiff
path: root/src/lanes.lua (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix error when using strict checkingBenoit Germain2017-08-031-1/+1
|
* Table transfer improvementsBenoit Germain2017-06-051-10/+8
| | | | | | | | * new API function lanes.register( "name", module) to manually register a module table after it was required * Transfering registered module tables will link the equivalent in the destination state instead of cloning it * bumped version to 3.11
* Improve LuaJIT supportBenoit Germain2017-05-101-0/+3
| | | | | | | * better LuaJIT-specific headers detection * add LuaJIT-specific libraries when known * properly raise an error when attempting to transfer a LUAT_CDATA value * some compilationg warning fixes
* Not needed to call configure. It is called automatically with no settings if ↵aryajur2015-09-181-478/+489
| | | | not called manually
* Fix standard library lists for Lua 5.3mpeterv2015-04-121-0/+1
| | | | | Fixes crash on require under Lua 5.3 without LUA_COMPAT_5_2. Fixes utf8 library not loaded under Lua 5.3.
* New API lanes.sleep (bumped version to 3.9.7)Benoit Germain2014-09-181-4/+21
|
* Minor fixes and tweaksBenoit Germain2014-05-161-83/+104
| | | | | | * bumped version to 3.9.5 * lanes.gen() error reporting improvements * fix linda.__towatch to return non-nil when the linda is empty
* lindas can have a group for keeper state assignation controlBenoit Germain2014-02-171-11/+0
|
* more fixes/tweaks about cancelled lindasBenoit Germain2014-02-131-35/+53
| | | | | | | | | | * bumped version to 3.8.5 * linda:limit() returns lanes.cancel_error on a limited linda * lanes.genlock() and lanes.genatomic() support cancelled lindas by returning lanes.cancel_error whenever appropriate * fixed a possible Lua stack overflow when calling linda:dump() * fixed cases where linda:send() and linda:receive() would not return lanes.cancel_error when they should
* new lane launcher option gc_cbBenoit Germain2014-01-221-4/+10
| | | | | | | | * 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)
* get()/set() improvementsBenoit Germain2014-01-201-1/+1
| | | | | | | * bumped version to 3.8.0 * linda:set() accepts multiple values to set in the specified slot * linda:get() accepts an optional count to peek several values at once * nil values are now converted just as in send()/receive()
* Cancellation improvements and some fixesBenoit Germain2014-01-161-1/+1
| | | | | | | | | | | | | | | * bumped version to 3.7.8 * lane:cancel() now accepts a boolean second argument when soft cancelling (negative timeout) to wake the thread if necessary * if a blocked linda send() or receive() call is interrupted by a cancellation request, it returns CANCEL_ERROR so that this case can be differentiated from a simple timeout * fixed WIN32 THREAD_CREATE() wrong _beginthreadex() error detection * fatal WIN32 threading errors retrieve and output the error description string with FormatMessage() * fixed missing lanes.set_singlethreaded * fixed perftest.lua * added test/cancel.lua
* fix on_state_create circular logic issueBenoit Germain2014-01-061-1/+1
| | | | | | * if config.on_state_create() is a C function, call it by direct C closure reconstruction in newly created states * bumped version to 3.7.6
* new config option demote_full_userdataBenoit Germain2013-12-201-34/+16
| | | | | use demote_full_userdata to select between light userdata demotion or raising an error when attempting to transfer a non-deep full userdata
* new API lanes.set_thread_priority()Benoit Germain2013-12-041-0/+1
|
* pthread thread priority refacto: lanes.luaBenoit Germain2013-12-021-1/+1
|
* lanes.genlock() improvements and fixBenoit Germain2013-11-161-20/+34
| | | | * Fixed function returned by lanes.genlock() not handling numeric keys properly when release lock * Enable lanes.genlock() to attempt lock with an optional "try" mode
* version 3.7.0Benoit Germain2013-10-111-40/+32
| | | | | | | | | | | | * fix lanes.threads() not being available in a lane where lanes.configure() settings didn't contain track_lanes although the initial configure() call did. * require "lanes".configure() sequence is only necessary at the first require "lanes". * fix a crash at application shutdown where in some situations we could deinitialize the protected allocator mutex while a lane was still using it. * fix timers broken by change 69
* Fix broken timersBenoit Germain2013-10-041-0/+1
|
* version 3.6.6Benoit Germain2013-09-271-12/+7
| | | | | | | | no longer call core.configure with dummy params when requiring lanes more than once (fixes potential multithreading issues with LuaJIT allocator) activated EnableCrashingOnCrashes() Win32 debug builds fixed some comments in code
* version 3.6.3v3.6.3Benoit Germain2013-08-131-1/+10
| | | | | | | | * lane:cancel(<negative-timeout>) only causes cancel_test() to return true but won't interrupt execution of the lane during linda operations * more explicit errors when trying to transfer unknown source functions (with new configure option verbose_errors) * default options wrap allocator around a mutex when run by LuaJIT
* wrap LuaJIT memory allocator in a critical section by defaultBenoit Germain2013-07-221-1/+10
|
* version 3.5.2Benoit Germain2013-03-131-2/+10
| | | | | | * stricter validation of with_timers config option: validator was accepting any non-boolean value * new configuration option protect_allocator for VMs with thread unsafe allocators (such as LuaJIT) * removed some obsolete bits of dead code
* Update lanes.luaBenoit Germain2013-03-121-2/+6
| | | fix validation of with_timers config option: validator was accepting any non-boolean value
* version 3.5.1v3.5.1Benoit Germain2013-02-131-14/+16
| | | | | | | * new lanes.h header and API call luaopen_lanes_embedded() for embedders * "lanes.core" is an acceptable library in the generator libs argument * library "*" wildcard also opens lanes.core * tweaked code for Xbox 360 build
* version 3.5.0Benoit Germain2013-01-301-160/+163
| | | | | | | | | | | | | | * new: API lanes.require(), use it instead of regular require() for modules that export C functions you need to send over. * new: lanes no longer require 'lanes.core' by default in every created state. Use {required={"lanes.core"}} if you need to transfer lanes functions. * internal: because of the above, reworked the timer implementation to remove upvalue-dependency on lanes.core * new: API lanes.timer_lane, to be able to operate on timer lane if need be * improved: if a module is a full userdata, scan its metatable for function database population * improved: on_state_create can be a Lua function * changed: on_state_create is called after the base libraries are loaded * package[loaders|searchers] is no longer transfered as function naming depends on slot order * internal: changed separator from '.' to '/' in lookup databases to be able to distinguish search levels and dot coming from module names * added some mode debug spew * updated tests to reflect the above changes
* * More detailed DEBUG_SPEW logsBenoit Germain2013-01-281-1/+1
| | | | * A bit of code cosmetics
* version 3.4.3v3.4.3Benoit Germain2013-01-241-5/+13
| | | | | | | | | | | * raise an error if lane generator libs specification contains a lib more than once * bit32 is a valid lib name in the libs specification (silently ignored by the Lua 5.1 build) * improved lanes.nameof to search inside table- and userdata- metatables for an object's name * fixed an unwarranted error when trying to discover a function name upon a failed transfer * contents of package.[path,cpath,preload,loaders|searchers] are pulled *only once* inside keeper states at initialisation * Lua function upvalues equal to the global environment aren't copied by value, but bound to the destination's global environment especially useful for Lua 5.2 _ENV * fixed loading of base libraries that didn't create the global tables when built for Lua 5.2
* Don't pull "package" settings in the timer laneBenoit Germain2013-01-101-1/+1
| | | Fixes an error when requiring lanes with active timers after having required "luarocks.loader" (issue #42).
* threads() raises an error if tracking is disabledBenoit Germain2012-12-171-1/+1
|
* lanes.threads(): public APIBenoit Germain2012-12-141-2/+7
|
* Fix lanes.timers()Benoit Germain2012-12-141-1/+2
|
* New API lanes.timers()Benoit Germain2012-12-121-12/+42
|
* version 3.4.0Benoit Germain2012-09-261-2/+2
| | | | | | | | | | * new method linda:dump() that outputs the full contents of a linda as a table, also linked to __towatch for Decoda support * linda:receive() API change! * instead of [val, key], linda:receive( timeout, key) returns [key, val] * instead of [val, [...]], linda:receive( timeout, linda.batched key) returns [key, val[, ...]] this is to unify the return values of regular and batched mode, and to be able to tell when batched mode is interrupted by a lane cancellation * fixed Lua 5.2 build to take into account the "loaders"->"searchers" name change in 'package' module. * a bit of html cleanup and added some infos in the documentation regarding the Lanes internals
* version 3.3.0Benoit Germain2012-09-101-55/+87
| | | | | | | | | | | | * lane.status can return "killed" if lane was forcefully killed with lanes:cancel() * lane:join(): return nil, "killed" if called on a killed lane. * lane[<n>]: produces [1] = nil, [2] = "killed" if the lane was killed * lane:join(): fixed an assertion in debug builds when joining a lane forcefully cancelled with lane:cancel( <x>, true). * indexing a lane with a string other than "join", "cancel" or "status" raises an error. * fixed configure() to correctly apply defaults when they are missing from the provided settings * added a shutdown_timeout to control the duration Lanes will wait for graceful termination of running lanes at application shutdown. Default is 0.25. Among other things, fixes issue #31.
* fix possible crash at application shutdown when a race condition causes ↵Benoit Germain2012-08-101-1/+1
| | | | linda objects to be collected after the keeper states are cleaned up.
* one more step toward 5.2 compatibilityv3.1.5Benoit Germain2012-07-101-2/+2
| | | | | | * lua51-lanes renamed lanes.core * keeper state microcode is no longer embedded inside lanes.core, but located and loaded with package.loaders[2] * changed rockspec build type from "make" to "builtin"
* expose lua51-lanes.now_secs() as lanes.now_secs()Benoit Germain2012-07-081-0/+1
| | | | (resolves issue #29)
* * when a transfered function is not found in source, guess its name to help ↵v3.1.4Benoit Germain2012-06-271-0/+1
| | | | | | the user find out what's wrong * new function lanes.nameof()
* fix issue #25Benoit Germain2012-06-241-30/+37
| | | | | | * lanes.timer() accepts a first_secs=nil to stop a timer * timer lane catches errors and prints them * fixed some typos in manual
* fix abusive internal error message displayed when the timer lane decides it ↵benoit-germain2012-06-201-2/+2
| | | | has to wake up in 0ms or when timer lane is cancelled.
* expose error sentinel lanes.cancel_errorbenoit-germain2012-06-191-0/+1
|
* Improve LuaJIT compatibility, part #2: timer lane generator uses "*" library ↵benoit-germain2012-04-261-1/+1
| | | | list
* * changed lanes.configure signature to receive a table instead of individual ↵Benoit Germain2012-02-181-10/+22
| | | | | | parameters * added support for an on_state_create callback called to load custom functions in a state in addition to the base libraries
* bugfix: restore ABOUT info where it belongs, in the lanes module table, ↵benoit-germain2011-11-151-1/+1
| | | | instead of the global scope.
* * removed packagepath and packagecpath options, replaced by a package table, ↵Benoit Germain2011-11-141-8/+5
| | | | | | | whose fields path, cpath, loaders, preload are transfered * code cleanup to facilitate transition between WIN32 and PTHREAD impleentations * tentative fix for desinit crashes when free running lanes are killed at process shutdown
* Cause `lanes.configure()` to return the module table to enable the `require ↵benoit-germain2011-11-071-0/+2
| | | | "lanes".configure()` idiom.
* * process exit change: close everything at GC when main state closes, not ↵Benoit Germain2011-11-051-17/+62
| | | | | | | | | | | | | | | | | | | | when atexit() handlers are processed * Lua 5.2-style module: * module() is no longer used to implement lanes.lua * a global "lanes" variable is no longer created when the module is required * the Lanes module table is returned instead * Lanes must be initialized before used: * the first occurence of 'require "lanes"' produces a minimal interface that only contains a configure() function * the remainder of the interface is made available once this function is called * subsequent calls to configure() do nothing * configure() controls the number of keeper states and the startup of timers * LuaJIT 2 compatibility * non-Lua functions are no longer copied by creating a C closure from a C pointer, but through 2-way lookup tables * this means that if a lane function body pulls non-Lua functions, the lane generator description must contain the list of libraries and modules that exports them * introduces a change in configuration .globals management: contents are copied *after* std libs are loaded * new .required configuration entry to list modules that must be require()'ed before lane body is transferred * lane:cancel() wakes up waiting lindas like what is done at lane shutdown
* New featuresBenoit Germain2011-03-301-2/+7
| | | | | | * linda honors __tostring and __concat * new accessor linda:keys(), to retrieve the list of keys with pending data inside a linda * new lanes options packagepath and packagecpath, in case one needs to set them differently than the default
* fix typo in timer function codebenoit-germain2011-03-021-1/+1
|