aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorosch <oliver at luced de>2018-08-27 19:06:15 +0200
committerosch <oliver at luced de>2018-08-27 19:06:15 +0200
commitcd91518d79388d5d42820a2b48918a7bf1e6d1a2 (patch)
tree07d166e87c2f294a0864501756e48d3c313309bb
parent99e9a506b4f0f2dcefb1844092553ca4ffa81087 (diff)
downloadlua-llthreads2-cd91518d79388d5d42820a2b48918a7bf1e6d1a2.tar.gz
lua-llthreads2-cd91518d79388d5d42820a2b48918a7bf1e6d1a2.tar.bz2
lua-llthreads2-cd91518d79388d5d42820a2b48918a7bf1e6d1a2.zip
interrupted error message now contains llthreads module name as prefix and
is also available in the public api
-rw-r--r--src/llthread.c14
-rw-r--r--test/test_interrupt.lua6
2 files changed, 15 insertions, 5 deletions
diff --git a/src/llthread.c b/src/llthread.c
index c78d766..66efe7c 100644
--- a/src/llthread.c
+++ b/src/llthread.c
@@ -98,11 +98,17 @@ typedef pthread_t os_thread_t;
98 98
99#define LLTHREAD_OPEN_NAME LLTHREAD_OPEN_NAME_IMPL(LLTHREAD_MODULE_NAME) 99#define LLTHREAD_OPEN_NAME LLTHREAD_OPEN_NAME_IMPL(LLTHREAD_MODULE_NAME)
100 100
101#define LLTHREAD_STRINGIFY(x) #x
102#define LLTHREAD_TOSTRING(x) LLTHREAD_STRINGIFY(x)
103#define LLTHREAD_MODULE_NAME_STRING LLTHREAD_TOSTRING(LLTHREAD_MODULE_NAME)
104
105
101LLTHREADS_EXPORT_API int LLTHREAD_OPEN_NAME(lua_State *L); 106LLTHREADS_EXPORT_API int LLTHREAD_OPEN_NAME(lua_State *L);
102 107
103#define LLTHREAD_NAME "LLThread" 108#define LLTHREAD_NAME "LLThread"
104static const char *LLTHREAD_TAG = LLTHREAD_NAME; 109static const char *LLTHREAD_TAG = LLTHREAD_NAME;
105static const char *LLTHREAD_LOGGER_HOLDER = LLTHREAD_NAME " logger holder"; 110static const char *LLTHREAD_LOGGER_HOLDER = LLTHREAD_NAME " logger holder";
111static const char* LLTHREAD_INTERRUPTED_ERROR = LLTHREAD_MODULE_NAME_STRING ": thread was interrupted";
106 112
107typedef struct llthread_child_t { 113typedef struct llthread_child_t {
108 lua_State *L; 114 lua_State *L;
@@ -697,11 +703,11 @@ static int l_llthread_new(lua_State *L) {
697static void llthread_interrupt1(lua_State *L, lua_Debug *ar) { 703static void llthread_interrupt1(lua_State *L, lua_Debug *ar) {
698 (void)ar; /* unused arg. */ 704 (void)ar; /* unused arg. */
699 lua_sethook(L, NULL, 0, 0); /* reset hook */ 705 lua_sethook(L, NULL, 0, 0); /* reset hook */
700 luaL_error(L, "interrupted!"); 706 luaL_error(L, LLTHREAD_INTERRUPTED_ERROR);
701} 707}
702static void llthread_interrupt2(lua_State *L, lua_Debug *ar) { 708static void llthread_interrupt2(lua_State *L, lua_Debug *ar) {
703 (void)ar; /* unused arg. */ 709 (void)ar; /* unused arg. */
704 luaL_error(L, "interrupted!"); 710 luaL_error(L, LLTHREAD_INTERRUPTED_ERROR);
705} 711}
706 712
707static int l_llthread_interrupt(lua_State *L) { 713static int l_llthread_interrupt(lua_State *L) {
@@ -796,5 +802,9 @@ LLTHREADS_EXPORT_API int LLTHREAD_OPEN_NAME(lua_State *L) {
796 l_llthread_push_version(L); 802 l_llthread_push_version(L);
797 lua_rawset(L, -3); 803 lua_rawset(L, -3);
798 804
805 lua_pushliteral(L, "interrupted_error");
806 lua_pushstring(L, LLTHREAD_INTERRUPTED_ERROR);
807 lua_rawset(L, -3);
808
799 return 1; 809 return 1;
800} 810}
diff --git a/test/test_interrupt.lua b/test/test_interrupt.lua
index 6a7a255..22c168e 100644
--- a/test/test_interrupt.lua
+++ b/test/test_interrupt.lua
@@ -18,7 +18,7 @@ do
18 18
19 local ok, err = thread:join() 19 local ok, err = thread:join()
20 print("thread1:join(): ", ok, err) 20 print("thread1:join(): ", ok, err)
21 assert(ok == false and err:match("interrupted!"), "thread1 result") 21 assert(ok == false and err:match(llthreads.interrupted_error), "thread1 result")
22 print("--- Done interrupt1!") 22 print("--- Done interrupt1!")
23end 23end
24 24
@@ -27,7 +27,7 @@ do
27 local thread = llthreads.new(include .. [[ 27 local thread = llthreads.new(include .. [[
28 local ok, err = pcall(function() for i = 1, 10 do sleep(1) end end) 28 local ok, err = pcall(function() for i = 1, 10 do sleep(1) end end)
29 print("thread2:", ok, err) 29 print("thread2:", ok, err)
30 assert(ok == false and err:match("interrupted!"), "interrupt2 result") 30 assert(ok == false and err:match(llthreads.interrupted_error), "interrupt2 result")
31 ]]) 31 ]])
32 32
33 thread:start() 33 thread:start()
@@ -52,7 +52,7 @@ do
52 52
53 local ok, err = thread:join() 53 local ok, err = thread:join()
54 print("thread3:join(): ", ok, err) 54 print("thread3:join(): ", ok, err)
55 assert(ok == false and err:match("interrupted!"), "thread3 result") 55 assert(ok == false and err:match(llthreads.interrupted_error), "thread3 result")
56 print("--- Done interrupt3!") 56 print("--- Done interrupt3!")
57end 57end
58 58