aboutsummaryrefslogtreecommitdiff
path: root/src/keeper.h (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Make sure any linda operation that can raise an error won't ever leave a ↵Benoit Germain2018-11-081-0/+1
| | | | mutex unreleased
* Improve LuaJIT-x64 compatibilityBenoit Germain2018-10-301-1/+3
| | | | | Restrict internal "light userdata constants" to 47 significant bits when compiling against LuaJIT-x64
* More MinGW buildfixes (I hope)Benoit Germain2018-10-251-1/+3
|
* Fix Lanes build by reorganizing types around a bitBenoit Germain2018-10-251-7/+16
|
* Fix 64 bits compilation warningsBenoit Germain2016-11-211-3/+3
|
* linda:send() improvementsBenoit Germain2014-02-271-0/+2
| | | | | | | | | * Bumped version to 3.9.3 * new exposed variable linda.null that exposes the internal NIL_SENTINEL marker * linda:send() interprets send key linda.null as authorization to silently send a single nil when not provided with anything to send (useful when sending results of a function that can return nothing)
* Multiverse compatibilityBenoit Germain2014-02-261-8/+14
| | | | | | | | | | | | | | | * bumped version to 3.9.2 * Internal rework: the whole Lanes engine now works "per universe" to allow concurrent Lanes execution in more than one embedded master state * this universe is a full userdata created in the master state, selfdestruct_gc is the __gc for this userdata * most of what was initialized only once is now per-universe * Fixed potential crashes at desinit if problems occur during keeper states initialisation * Fixed require() not always serialized properly * Raise an error instead of crashing on deep userdata prelude memory allocation failure * Added forgotten mutex desinitialisation at universe shutdown
* Lanes init crash fixBenoit Germain2014-02-181-9/+2
| | | | | | | | | | | * bumped version to 3.9.1 * keeper array is allocated with master state's alloc function instead of malloc()/free() * prevent application crash when specifying a very large number of keepers in the configuration options * removed some keeper desinit legacy dead code * any error occuring during one-time inits is raised outside the one-time mutex protected code region
* lindas can have a group for keeper state assignation controlBenoit Germain2014-02-171-3/+4
|
* 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()
* version 3.7.0Benoit Germain2013-10-111-1/+1
| | | | | | | | | | | | * 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
* Reduce memory footprint, simplify module order setup in conjuction with ↵Benoit Germain2013-09-261-11/+0
| | | | | | | | | | | | Lanes, and send over native functions a bit faster as well * Lanes no longer has to internally require modules inside the keeper states because they no longer need a lookup database. the lookup name is stored as-is and actually converted in the destination state * optimisation: bypass cache when sending native functions over * removed all the KEEPER_MODEL_LUA code, as it can no longer work anyway
* version 3.5.0Benoit Germain2013-01-301-1/+1
| | | | | | | | | | | | | | * 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
* version 3.4.3v3.4.3Benoit Germain2013-01-241-1/+1
| | | | | | | | | | | * 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
* fix application shutdown crash by not registering anything with atexit()v3.4.0Benoit Germain2012-11-211-0/+9
|
* version 3.4.0Benoit Germain2012-09-261-0/+1
| | | | | | | | | | * 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
* lanes version 3.2.0v3.2.0Benoit Germain2012-08-221-1/+24
| | | | | * keeper internals implemented in C instead of Lua for better performances * fixed arguments checks in linda:limit() and linda:set()
* fix possible crash at application shutdown when a race condition causes ↵Benoit Germain2012-08-101-1/+0
| | | | linda objects to be collected after the keeper states are cleaned up.
* * changed lanes.configure signature to receive a table instead of individual ↵Benoit Germain2012-02-181-1/+1
| | | | | | parameters * added support for an on_state_create callback called to load custom functions in a state in addition to the base libraries
* * process exit change: close everything at GC when main state closes, not ↵Benoit Germain2011-11-051-0/+1
| | | | | | | | | | | | | | | | | | | | 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
* * linda uses a fast FIFO implementation to speed up data exchangesBenoit Germain2011-04-181-0/+1
| | | | | | | | * new linda:count() method * new linda batched data read mode * proper key type check in all linda methods * fix setup-vc.cmd to support Visual Studio 2010 and Windows 7 64 bits * bugfix: release keeper state mutex at desinit
* Make the number of internal keeper states selectable by an optional ↵Benoit Germain2011-02-211-1/+1
| | | | parameter passed to require.
* * keeper.lua is now embedded in text form instead of bytecode to improve ↵Benoit Germain2011-02-181-0/+18
LuaJIT2-compatibility (but this is not enough). * moved keeper-related code in a separate source file