aboutsummaryrefslogtreecommitdiff
path: root/src/tools.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Don't mutex-wrap require() more than onceBenoit Germain2014-03-191-4/+5
|
* Multiverse compatibilityBenoit Germain2014-02-261-150/+197
| | | | | | | | | | | | | | | * 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
* more graceful handling of out-of-memory errorsBenoit Germain2014-02-181-1/+4
| | | | | * raise an error instead of dereferencing a NULL pointer on deep userdata creation and lane struct creation
* Lanes init crash fixBenoit Germain2014-02-181-11/+22
| | | | | | | | | | | * 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
* Deep userdata support improvementsBenoit Germain2014-02-171-419/+372
| | | | | | | | | | | | * bumped version to 3.9.0 * keepers now require "package", receive package.path & package.cpath, and call on_state_create() if it is a C function * changed the deep public API (improved deep idfunc signature, renamed luaG_deep_userdata to luaG_newdeepuserdata) * if an error occurs while copying a deep userdata, don't raise inside the keeper state * fixed situations where raised errors could lead to memory leaks (deep gc)
* another Lua stack overflow fixBenoit Germain2014-01-241-1/+2
|
* 2 crash fixes and 1 experimentBenoit Germain2014-01-221-9/+13
| | | | | | | | | | * bumped version to 3.8.3 * fixed a possible Lua stack overflow when sending complex function through lindas or as lane body * experimental: lanes.nameof() scans the registry if a regular search didn't yield anything interesting * fixed lanes.nameof() misbehaving when encountering a LUA_TTHREAD object
* fix on_state_create circular logic issueBenoit Germain2014-01-061-13/+43
| | | | | | * 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
* Update tools.cAlexanderKhilo2013-12-281-0/+2
| | | Actually, you shouldn't need malloc.h at all, it's obsolete; including stdlib.h should take care of what malloc.h used to handle.
* new config option demote_full_userdataBenoit Germain2013-12-201-3/+22
| | | | | use demote_full_userdata to select between light userdata demotion or raising an error when attempting to transfer a non-deep full userdata
* supposedly improved pthread supportBenoit Germain2013-11-291-4/+5
| | | | | | | | | * bumped version to 3.7.3 * set pthread thread cancel type to PTHREAD_CANCEL_ASYNCHRONOUS * lane_h:cancel() accepts a 3rd timeout argument used when waiting for actual thread termination (hitting the timeout raises an error) * added PROPAGATE_ALLOCF macro to select state creation mode (lua_newstate or luaL_newstate)
* Fix internal error at lane creation when the generator doesn't open any base ↵Benoit Germain2013-11-181-5/+4
| | | | | library Fix issue #77.
* Changed a DEBUGSPEW outputBenoit Germain2013-11-161-1/+1
|
* Fix a case where an error could be raised inside a keeper stateBenoit Germain2013-11-131-1/+2
|
* Improved some DEBUGSPEW outputBenoit Germain2013-11-071-2/+6
|
* Fix an unitialized variable usageBenoit Germain2013-11-061-0/+1
|
* Fix lanes.nameof() crashing when encountering a light userdataBenoit Germain2013-11-041-12/+20
|
* version 3.7.0Benoit Germain2013-10-111-28/+68
| | | | | | | | | | | | * 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
* bugfix: no longer create a global named "lanes.core" inside lanes when libs ↵Benoit Germain2013-10-031-17/+11
| | | | list is "*"
* Fix crash when a module is a simple C function (issue #59)Benoit Germain2013-09-301-15/+34
|
* version 3.6.6Benoit Germain2013-09-271-4/+4
| | | | | | | | 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
* Reduce memory footprint, simplify module order setup in conjuction with ↵Benoit Germain2013-09-261-216/+230
| | | | | | | | | | | | 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.6.3v3.6.3Benoit Germain2013-08-131-48/+120
| | | | | | | | * 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
* remove 2 weird characters in commentsBenoit Germain2013-05-201-2/+2
|
* Fix MinGW compiler warnings-as-errorsBenoit Germain2013-04-081-6/+7
|
* Removed LUA_COMPAT_ALL-less Lua5.2 restrictionBenoit Germain2013-04-051-41/+57
|
* version 3.5.1v3.5.1Benoit Germain2013-02-131-7/+73
| | | | | | | * 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
* Fix issue #45Benoit Germain2013-02-051-1/+1
|
* foward on_state_create error to main state if anyBenoit Germain2013-02-011-1/+5
|
* version 3.5.0Benoit Germain2013-01-301-33/+59
| | | | | | | | | | | | | | * 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-254/+323
| | | | * A bit of code cosmetics
* version 3.4.4v3.4.4Benoit Germain2013-01-261-78/+94
| | | | | | | | * 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-83/+166
| | | | | | | | | | | * 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
* Enable transfer of recursive upvalued functionsBenoit Germain2013-01-101-68/+55
| | | Removed a limitation preventing Lua functions with indirect recursive upvalue references from being transferable.
* Added some upvalues inter-copy debug codeBenoit Germain2013-01-091-21/+28
|
* Raise an error on multiple-named functions.Benoit Germain2012-10-251-43/+41
| | | | | | | | | | | | | Lua 5.2 introduced a hash randomizer seed which causes table iteration to yield a different key order on different VMs even when the tables are populated the exact same way. When Lua is built with compatibility options (such as LUA_COMPAT_ALL), this causes several base libraries to register functions under multiple names. This, with the randomizer, can cause the first name of a function to be different on different VMs, which breaks function transfer. This means that Lua 5.2 must be built with compatibility off to be able to use Lanes. Even under Lua 5.1, this may cause trouble (even if this would be much less frequent) Unfortunately, this fails with string.gfind/string.gmatch when Lua 5.1 is built with LUA_COMPAT_GFIND (which is the case of LuaBinaries), so for the time being, fail only for Lua 5.2 as the randomizer is the real show breaker here.
* Fixed the fix...Benoit Germain2012-10-231-1/+1
|
* Fixed thread name retrieval in main state.Benoit Germain2012-10-231-2/+7
|
* More informative messages on failed transfers.Benoit Germain2012-10-231-4/+7
|
* code updated to build against Lua 5.1 and Lua 5.2v3.1.6Benoit Germain2012-08-141-6/+8
|
* * when a transfered function is not found in source, guess its name to help ↵v3.1.4Benoit Germain2012-06-271-14/+125
| | | | | | the user find out what's wrong * new function lanes.nameof()
* Improve LuaJIT compatibility, part #1: "*" library list is loaded through ↵benoit-germain2012-04-261-2/+10
| | | | luaL_openlibs()
* Fix issue #15 (lanes fails to build on Linux x86_64 (gcc 4.6.1) size_t vs ↵benoit-germain2012-04-241-4/+1
| | | | int size)
* * changed lanes.configure signature to receive a table instead of individual ↵Benoit Germain2012-02-181-34/+47
| | | | | | parameters * added support for an on_state_create callback called to load custom functions in a state in addition to the base libraries
* some more compilation warning fixesBenoit Germain2011-11-091-2/+2
|
* * fix all compilation warnings raised by -WextraBenoit Germain2011-11-071-2/+2
| | | | * 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-151/+498
| | | | | | | | | | | | | | | | | | | | 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
* Debug code to check why LuaJIT2-beta8 fails to load the module.benoit-germain2011-06-241-5/+14
|
* * keeper.lua is now embedded in text form instead of bytecode to improve ↵Benoit Germain2011-02-181-0/+69
| | | | | | LuaJIT2-compatibility (but this is not enough). * moved keeper-related code in a separate source file
* Lane userdata implementation refactoring:Benoit Germain2011-02-171-42/+79
| | | | | | | | | | | | | | | - 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.