summaryrefslogtreecommitdiff
path: root/src/lanes.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* version 3.6.0Benoit Germain2013-03-141-13/+14
| | | | | * protect_allocator is an API change -> version bump * bugfix: allocator protection should be done once per primary Lua state, not once only the first time ever Lanes is required
* version 3.5.2Benoit Germain2013-03-131-225/+242
| | | | | | * 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
* Fixed a little APICHECK issueBenoit Germain2013-03-121-2/+3
|
* version 3.5.1v3.5.1Benoit Germain2013-02-131-25/+57
| | | | | | | * 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-62/+72
| | | | | | | | | | | | | | * 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-60/+91
| | | | * A bit of code cosmetics
* version 3.4.4v3.4.4Benoit Germain2013-01-261-6/+2
| | | | | | | | * bugfix: take into account the fact that "coroutine" is no longer part of base library in Lua 5.2 * bugfix: if "bit32" was listed in the libraries, it wouldn't open (library list parsing failing on digits) * bugfix: Use luaL_requiref() to open standard libraries in Lua 5.2 as we should * bugfix: any Lua state created by Lanes reuses the allocator function of the originating state * bugfix: don't call on_state_create() while GC is suspended during lua state initialization
* version 3.4.3v3.4.3Benoit Germain2013-01-241-160/+211
| | | | | | | | | | | * 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
* minor version bumpBenoit Germain2013-01-101-1/+1
|
* Fixed lane tracking featureBenoit Germain2012-12-171-64/+128
|
* lanes.threads(): core implementationBenoit Germain2012-12-141-31/+112
|
* minor version bumpBenoit Germain2012-12-121-2/+3
|
* fix issue #40Benoit Germain2012-12-031-3/+3
| | | linda:send() and linda:receive() no longer trigger string->number autocoercion when checking for the optional timeout argument: a string is always a linda slot, even if coercible.
* Same selfdestruct chain handling on all platformsBenoit Germain2012-11-271-1/+1
|
* fix application shutdown crash by not registering anything with atexit()v3.4.0Benoit Germain2012-11-211-0/+3
|
* Lua version sanity checkBenoit Germain2012-10-231-3/+14
|
* Always set "decoda_name" global in a new Lane.Benoit Germain2012-10-231-0/+4
|
* version 3.4.0Benoit Germain2012-09-261-4/+25
| | | | | | | | | | * 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
* minor internal changesBenoit Germain2012-09-131-74/+35
| | | | | | * implemented set_debug_threadname() for pthread builds where possible * refactored linda __tostring and __concat * linda metatable's __metatable is a string instead of a boolean
* fixed a bad forward declarationbenoit-germain2012-09-111-87/+96
|
* version 3.3.0Benoit Germain2012-09-101-175/+242
| | | | | | | | | | | | * 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.
* lanes version 3.2.0v3.2.0Benoit Germain2012-08-221-13/+18
| | | | | * keeper internals implemented in C instead of Lua for better performances * fixed arguments checks in linda:limit() and linda:set()
* Fix 64 bits compilation warnings (issue #34)benoit-germain2012-08-201-3/+3
|
* code updated to build against Lua 5.1 and Lua 5.2v3.1.6Benoit Germain2012-08-141-13/+20
|
* Good crash fix this time, part 1benoit-germain2012-08-101-1/+1
|
* fix possible crash at application shutdown when a race condition causes ↵Benoit Germain2012-08-101-4/+2
| | | | linda objects to be collected after the keeper states are cleaned up.
* lanes.linda() accepts an optional name argumentbenoit-germain2012-08-061-6/+33
|
* one more step toward 5.2 compatibilityv3.1.5Benoit Germain2012-07-101-5/+5
| | | | | | * 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"
* * 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 crash at application exit when encountering a blocked lane on which ↵benoit-germain2012-06-251-1/+1
| | | | lane:cancel() has been called. (issue #28).
* fix issue #25Benoit Germain2012-06-241-1/+1
| | | | | | * lanes.timer() accepts a first_secs=nil to stop a timer * timer lane catches errors and prints them * fixed some typos in manual
* * linda:receive() batched mode now accepts a max_count optional argumentBenoit Germain2012-06-121-19/+36
|
* * fixed thread_cancel() not working when called without argumentBenoit Germain2012-06-051-53/+115
| | | | * new lane-global function set_error_reporting() to enable more data detailed data provided by lane_error()
* bumping version number to 3.1.1v3.1.1Benoit Germain2012-05-081-1/+1
|
* * changed lanes.configure signature to receive a table instead of individual ↵Benoit Germain2012-02-181-36/+30
| | | | | | parameters * added support for an on_state_create callback called to load custom functions in a state in addition to the base libraries
* crashfix: WIN32 builds shouldn't THREAD_WAIT on a THREAD_KILL'ed thread, ↵benoit-germain2011-11-151-1/+3
| | | | (but pthread builds must still do it to make sure the thread is no longger running)
* * removed packagepath and packagecpath options, replaced by a package table, ↵Benoit Germain2011-11-141-90/+71
| | | | | | | 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
* some more compilation warning fixesBenoit Germain2011-11-091-7/+8
|
* * fix all compilation warnings raised by -WextraBenoit Germain2011-11-071-15/+17
| | | | * fix a multithreading issue at desinit causing invalid memory accesses (to be verified)
* * process exit change: close everything at GC when main state closes, not ↵Benoit Germain2011-11-051-86/+225
| | | | | | | | | | | | | | | | | | | | 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:send() raises an error when there is no data to send instead of ↵v2.2.0Benoit Germain2011-05-141-0/+6
| | | | silently doing nothing.
* * linda uses a fast FIFO implementation to speed up data exchangesBenoit Germain2011-04-181-53/+106
| | | | | | | | * 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
* New featuresBenoit Germain2011-03-301-3/+133
| | | | | | * 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
* hopefully fix pthread compilation (and should work better under WIN32 too...)v2.1.0Benoit Germain2011-03-021-2/+2
|
* Just a small fix necessary because -Werror is used and GCC 4.2 on OS X ↵Benoit Germain2011-03-011-1/+1
| | | | complains.
* * fixed potential crash at application shutdown when calling lua_close() on ↵Benoit Germain2011-03-011-85/+153
| | | | | | | a killed thread's VM. * exposed cancel_test() in the lanes to enable manual testing for cancellation requests. * removed kludgy {globals={threadName}} support, replaced with a new function set_debug_threadname().
* Make the number of internal keeper states selectable by an optional ↵Benoit Germain2011-02-211-22/+11
| | | | parameter passed to require.
* * keeper.lua is now embedded in text form instead of bytecode to improve ↵Benoit Germain2011-02-181-213/+2
| | | | | | LuaJIT2-compatibility (but this is not enough). * moved keeper-related code in a separate source file
* Lane userdata implementation refactoring:Benoit Germain2011-02-171-28/+203
| | | | | | | | | | | | | | | - Refactor lane proxy implementation: it is now a full userdata instead of a table, and its methods are implemented in C instead of Lua. * its metatable is no longer accessible. * writing to the proxy raises an error. * it is no longer possible to overwrite its join() and cancel() methods - when a deep userdata idfunc requests a module to be required, manually check that it is not loaded before requiring it instead of relying on the require function's loop detection feature. - when a module must be required, raise an error if the 'require' function is not found in the target state. - we know Lanes is loaded in the master state, so we don't force it to be required in every lane too when a linda deep userdata is copied.
* Fixed application hang-up because keeper state was not released in case of ↵Benoit Germain2011-02-141-279/+364
| | | | errors thrown by inter-state data copy for unsupported types