diff options
| author | Benoit Germain <bnt.germain@gmail.com> | 2011-02-14 21:20:24 +0100 |
|---|---|---|
| committer | Benoit Germain <bnt.germain@gmail.com> | 2011-02-14 21:20:24 +0100 |
| commit | afb2da4789cdaddc5a0c3c9c2d57ccd36bcc74c7 (patch) | |
| tree | 5f4208ca75f46848f793441530d16ca019d4bd00 /tests | |
| parent | baeb379c2e4eb436ecb0bcc4d88cb50930ef378e (diff) | |
| download | lanes-afb2da4789cdaddc5a0c3c9c2d57ccd36bcc74c7.tar.gz lanes-afb2da4789cdaddc5a0c3c9c2d57ccd36bcc74c7.tar.bz2 lanes-afb2da4789cdaddc5a0c3c9c2d57ccd36bcc74c7.zip | |
Fixed application hang-up because keeper state was not released in case of errors thrown by inter-state data copy for unsupported types
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/appendud.lua | 6 | ||||
| -rw-r--r-- | tests/errhangtest.lua | 13 | ||||
| -rw-r--r-- | tests/irayo_closure.lua | 10 |
3 files changed, 22 insertions, 7 deletions
diff --git a/tests/appendud.lua b/tests/appendud.lua index afea0e9..65d0798 100644 --- a/tests/appendud.lua +++ b/tests/appendud.lua | |||
| @@ -31,18 +31,18 @@ local _ud = { | |||
| 31 | 31 | ||
| 32 | 32 | ||
| 33 | function appendud(tab, ud) | 33 | function appendud(tab, ud) |
| 34 | io.stderr:write "Starting" | 34 | io.stderr:write "Starting" |
| 35 | tab:beginupdate() set_finalizer( function() tab:endupdate() end ) | 35 | tab:beginupdate() set_finalizer( function() tab:endupdate() end ) |
| 36 | ud:lock() set_finalizer( function() ud:unlock() end ) | 36 | ud:lock() set_finalizer( function() ud:unlock() end ) |
| 37 | for i = 1,#ud do | 37 | for i = 1,#ud do |
| 38 | tab[#tab+1] = ud[i] | 38 | tab[#tab+1] = ud[i] |
| 39 | end | 39 | end |
| 40 | io.stderr:write "Ending" | 40 | io.stderr:write "Ending" |
| 41 | return tab -- need to return 'tab' since we're running in a separate thread | 41 | return tab -- need to return 'tab' since we're running in a separate thread |
| 42 | -- ('tab' is passed over lanes by value, not by reference) | 42 | -- ('tab' is passed over lanes by value, not by reference) |
| 43 | end | 43 | end |
| 44 | 44 | ||
| 45 | local t,err= lanes.gen( appendud )( _tab, _ud ) -- create & launch a thread | 45 | local t,err= lanes.gen( "io", appendud )( _tab, _ud ) -- create & launch a thread |
| 46 | assert(t) | 46 | assert(t) |
| 47 | assert(not err) | 47 | assert(not err) |
| 48 | 48 | ||
diff --git a/tests/errhangtest.lua b/tests/errhangtest.lua new file mode 100644 index 0000000..ddc1bfb --- /dev/null +++ b/tests/errhangtest.lua | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | lanes = require('lanes') | ||
| 2 | |||
| 3 | local linda = lanes.linda() | ||
| 4 | |||
| 5 | local coro = coroutine.create(function() end) | ||
| 6 | |||
| 7 | -- we are not allowed to send coroutines through a lanes | ||
| 8 | -- however, this should raise an error, not hang the program... | ||
| 9 | print( pcall(linda.send,linda, 'test', "oh boy")) | ||
| 10 | print( pcall(linda.send,linda, 'test', coro)) | ||
| 11 | res = linda:receive('test') | ||
| 12 | print( res) | ||
| 13 | -- linda:send( 'test', coro) | ||
diff --git a/tests/irayo_closure.lua b/tests/irayo_closure.lua index faf08fd..3a82302 100644 --- a/tests/irayo_closure.lua +++ b/tests/irayo_closure.lua | |||
| @@ -20,11 +20,13 @@ local function testrun() | |||
| 20 | return true | 20 | return true |
| 21 | end | 21 | end |
| 22 | 22 | ||
| 23 | -- Should also work without these lines, but currently doesn't (bug in Lanes, | 23 | -- When some function dereferences a global key, the asssociated global in the source state |
| 24 | -- a function thrown over isn't connected to receiving lane's globals) | 24 | -- isn't sent over the target lane |
| 25 | -- therefore, the necessary functions must either be pulled as upvalues (hence locals) | ||
| 26 | -- or the globals must exist in the target lanes because the modules have been required there | ||
| 25 | -- | 27 | -- |
| 26 | --local print=print | 28 | local print=print |
| 27 | --local assert=assert | 29 | local assert=assert |
| 28 | 30 | ||
| 29 | local function useclosurehere() | 31 | local function useclosurehere() |
| 30 | assert( print ) | 32 | assert( print ) |
