aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoteus <mimir@newmail.ru>2013-12-31 11:05:54 +0400
committermoteus <mimir@newmail.ru>2013-12-31 11:19:39 +0400
commit1de7313ade8b0a6f6e3dc395eed5dd65c44a7829 (patch)
tree6ab9998a0c35c023c311a05e2eca449b99091037
parent24a0d330a1d7c34269ce987999e221e99171b35c (diff)
downloadlua-llthreads2-1de7313ade8b0a6f6e3dc395eed5dd65c44a7829.tar.gz
lua-llthreads2-1de7313ade8b0a6f6e3dc395eed5dd65c44a7829.tar.bz2
lua-llthreads2-1de7313ade8b0a6f6e3dc395eed5dd65c44a7829.zip
Change. Implement 2 rockspecs llthreads2 and llthreads2-compat.
-rw-r--r--.travis.yml2
-rw-r--r--rockspecs/lua-llthreads2-compat-scm-0.rockspec44
-rw-r--r--rockspecs/lua-llthreads2-scm-0.rockspec8
-rw-r--r--src/llthread.c28
4 files changed, 71 insertions, 11 deletions
diff --git a/.travis.yml b/.travis.yml
index e5d2f0f..95708f1 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -40,7 +40,7 @@ before_install:
40 40
41install: 41install:
42 - sudo luarocks install lunitx 42 - sudo luarocks install lunitx
43 - sudo luarocks make rockspecs/lua-llthreads2-scm-0.rockspec 43 - sudo luarocks make rockspecs/lua-llthreads2-compat-scm-0.rockspec
44 44
45script: 45script:
46 - cd test 46 - cd test
diff --git a/rockspecs/lua-llthreads2-compat-scm-0.rockspec b/rockspecs/lua-llthreads2-compat-scm-0.rockspec
new file mode 100644
index 0000000..ac81a15
--- /dev/null
+++ b/rockspecs/lua-llthreads2-compat-scm-0.rockspec
@@ -0,0 +1,44 @@
1package = "lua-llthreads2-compat"
2version = "scm-0"
3source = {
4 url = "https://github.com/moteus/lua-llthreads2/archive/master.zip",
5 dir = "lua-llthreads2-master",
6}
7description = {
8 summary = "Low-Level threads for Lua",
9 homepage = "http://github.com/moteus/lua-llthreads2",
10 license = "MIT/X11",
11 detailed = [[
12 This is drop-in replacement for `lua-llthread` module.
13 In additional module supports: thread join with zero timeout; logging thread errors with
14 custom logger; run detached joinable threads; pass cfunctions as argument to child thread.
15 ]],
16}
17dependencies = {
18 "lua >= 5.1, < 5.3",
19}
20build = {
21 type = "builtin",
22 platforms = {
23 unix = {
24 modules = {
25 llthreads = {
26 libraries = {"pthread"},
27 }
28 }
29 },
30 windows = {
31 modules = {
32 llthreads = {
33 libraries = {"kernel32"},
34 }
35 }
36 }
37 },
38 modules = {
39 llthreads = {
40 sources = { "src/l52util.c", "src/llthread.c" },
41 defines = { "LLTHREAD_MODULE_NAME=llthreads" },
42 }
43 }
44} \ No newline at end of file
diff --git a/rockspecs/lua-llthreads2-scm-0.rockspec b/rockspecs/lua-llthreads2-scm-0.rockspec
index e543dc3..9810118 100644
--- a/rockspecs/lua-llthreads2-scm-0.rockspec
+++ b/rockspecs/lua-llthreads2-scm-0.rockspec
@@ -8,6 +8,11 @@ description = {
8 summary = "Low-Level threads for Lua", 8 summary = "Low-Level threads for Lua",
9 homepage = "http://github.com/moteus/lua-llthreads2", 9 homepage = "http://github.com/moteus/lua-llthreads2",
10 license = "MIT/X11", 10 license = "MIT/X11",
11 detailed = [[
12 This is drop-in replacement for `lua-llthread` module but the module called `llthreads2`.
13 In additional module supports: thread join with zero timeout; logging thread errors with
14 custom logger; run detached joinable threads; pass cfunctions as argument to child thread.
15 ]],
11} 16}
12dependencies = { 17dependencies = {
13 "lua >= 5.1, < 5.3", 18 "lua >= 5.1, < 5.3",
@@ -31,8 +36,9 @@ build = {
31 } 36 }
32 }, 37 },
33 modules = { 38 modules = {
34 llthreads = { 39 llthreads2 = {
35 sources = { "src/l52util.c", "src/llthread.c" }, 40 sources = { "src/l52util.c", "src/llthread.c" },
41 defines = { "LLTHREAD_MODULE_NAME=llthreads2" },
36 } 42 }
37 } 43 }
38} \ No newline at end of file 44} \ No newline at end of file
diff --git a/src/llthread.c b/src/llthread.c
index 0c4a107..88d3805 100644
--- a/src/llthread.c
+++ b/src/llthread.c
@@ -80,11 +80,21 @@ typedef pthread_t os_thread_t;
80#define ALLOC_STRUCT(S) (S*)calloc(1, sizeof(S)) 80#define ALLOC_STRUCT(S) (S*)calloc(1, sizeof(S))
81#define FREE_STRUCT(O) free(O) 81#define FREE_STRUCT(O) free(O)
82 82
83LLTHREADS_EXPORT_API int luaopen_llthreads(lua_State *L); 83#ifndef LLTHREAD_MODULE_NAME
84# define LLTHREAD_MODULE_NAME llthreads
85#endif
86
87#define CAT(S1,S2) S1##S2
88
89#define LLTHREAD_OPEN_NAME_IMPL(NAME) CAT(luaopen_, NAME)
90
91#define LLTHREAD_OPEN_NAME LLTHREAD_OPEN_NAME_IMPL(LLTHREAD_MODULE_NAME)
92
93LLTHREADS_EXPORT_API int LLTHREAD_OPEN_NAME(lua_State *L);
84 94
85#define LLTHREAD_T_NAME "LLThread" 95#define LLTHREAD_NAME "LLThread"
86static const char *LLTHREAD_T = LLTHREAD_T_NAME; 96static const char *LLTHREAD_TAG = LLTHREAD_NAME;
87static const char *LLTHREAD_LOGGER_HOLDER = LLTHREAD_T_NAME " logger holder"; 97static const char *LLTHREAD_LOGGER_HOLDER = LLTHREAD_NAME " logger holder";
88 98
89typedef struct llthread_child_t { 99typedef struct llthread_child_t {
90 lua_State *L; 100 lua_State *L;
@@ -476,7 +486,7 @@ static llthread_t *llthread_create(lua_State *L, const char *code, size_t code_l
476//{ Lua interface to llthread 486//{ Lua interface to llthread
477 487
478static llthread_t *l_llthread_at (lua_State *L, int i) { 488static llthread_t *l_llthread_at (lua_State *L, int i) {
479 llthread_t **this = (llthread_t **)lutil_checkudatap (L, i, LLTHREAD_T); 489 llthread_t **this = (llthread_t **)lutil_checkudatap (L, i, LLTHREAD_TAG);
480 luaL_argcheck (L, this != NULL, i, "thread expected"); 490 luaL_argcheck (L, this != NULL, i, "thread expected");
481 luaL_argcheck (L, *this != NULL, i, "thread expected"); 491 luaL_argcheck (L, *this != NULL, i, "thread expected");
482 // luaL_argcheck (L, !(counter->flags & FLAG_DESTROYED), 1, "PDH Counter is destroyed"); 492 // luaL_argcheck (L, !(counter->flags & FLAG_DESTROYED), 1, "PDH Counter is destroyed");
@@ -484,7 +494,7 @@ static llthread_t *l_llthread_at (lua_State *L, int i) {
484} 494}
485 495
486static int l_llthread_delete(lua_State *L) { 496static int l_llthread_delete(lua_State *L) {
487 llthread_t **pthis = (llthread_t **)lutil_checkudatap (L, 1, LLTHREAD_T); 497 llthread_t **pthis = (llthread_t **)lutil_checkudatap (L, 1, LLTHREAD_TAG);
488 luaL_argcheck (L, pthis != NULL, 1, "thread expected"); 498 luaL_argcheck (L, pthis != NULL, 1, "thread expected");
489 if(*pthis == NULL) return 0; 499 if(*pthis == NULL) return 0;
490 llthread_destroy(*pthis); 500 llthread_destroy(*pthis);
@@ -579,7 +589,7 @@ static int l_llthread_join(lua_State *L) {
579 589
580static int l_llthread_new(lua_State *L) { 590static int l_llthread_new(lua_State *L) {
581 size_t lua_code_len; const char *lua_code = luaL_checklstring(L, 1, &lua_code_len); 591 size_t lua_code_len; const char *lua_code = luaL_checklstring(L, 1, &lua_code_len);
582 llthread_t **this = lutil_newudatap(L, llthread_t*, LLTHREAD_T); 592 llthread_t **this = lutil_newudatap(L, llthread_t*, LLTHREAD_TAG);
583 lua_insert(L, 2); /*move self prior args*/ 593 lua_insert(L, 2); /*move self prior args*/
584 *this = llthread_create(L, lua_code, lua_code_len); 594 *this = llthread_create(L, lua_code, lua_code_len);
585 595
@@ -611,9 +621,9 @@ static const struct luaL_Reg l_llthreads_lib[] = {
611 {NULL, NULL} 621 {NULL, NULL}
612}; 622};
613 623
614LLTHREADS_EXPORT_API int luaopen_llthreads(lua_State *L) { 624LLTHREADS_EXPORT_API int LLTHREAD_OPEN_NAME(lua_State *L) {
615 int top = lua_gettop(L); 625 int top = lua_gettop(L);
616 lutil_createmetap(L, LLTHREAD_T, l_llthread_meth, 0); 626 lutil_createmetap(L, LLTHREAD_TAG, l_llthread_meth, 0);
617 lua_settop(L, top); 627 lua_settop(L, top);
618 628
619 lua_newtable(L); 629 lua_newtable(L);