Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/torch/threads-ffi.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Guo <guorui.xt@gmail.com>2016-09-23 17:36:38 +0300
committerRui Guo <guorui.xt@gmail.com>2016-09-23 17:36:38 +0300
commit9ee8b3fea852ea49abe0cba3e49cee050862142e (patch)
tree07b367ed373b21f6fef45429ee07802d11555e4f
parent7cabb0091919af846de3d54a021973e6080a819c (diff)
use internal pthread wrapper for windows
-rw-r--r--lib/THThread.c8
-rw-r--r--lib/init.c2
-rw-r--r--lib/thread-main.c2
-rw-r--r--rocks/threads-scm-1.rockspec25
4 files changed, 27 insertions, 10 deletions
diff --git a/lib/THThread.c b/lib/THThread.c
index 18fc81e..6951caf 100644
--- a/lib/THThread.c
+++ b/lib/THThread.c
@@ -18,6 +18,10 @@ typedef HANDLE pthread_t;
typedef DWORD pthread_attr_t;
typedef HANDLE pthread_mutex_t;
typedef HANDLE pthread_cond_t;
+typedef HANDLE pthread_mutexattr_t;
+typedef HANDLE pthread_condattr_t;
+typedef unsigned ( __stdcall *THREAD_FUNCTION )( void * );
+#define restrict __restrict
static int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr, void *(*start_routine)(void *),
@@ -41,7 +45,7 @@ static int pthread_mutex_init(pthread_mutex_t *restrict mutex,
static int pthread_mutex_lock(pthread_mutex_t *mutex)
{
- return WaitForSingleObject(*mutex, INFINITE) == 0;
+ return WaitForSingleObject(*mutex, INFINITE) != 0;
}
static int pthread_mutex_unlock(pthread_mutex_t *mutex)
@@ -65,7 +69,7 @@ static int pthread_cond_wait(pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex)
{
SignalObjectAndWait(*mutex, *cond, INFINITE, FALSE);
- return WaitForSingleObject(*mutex, INFINITE) == 0;
+ return WaitForSingleObject(*mutex, INFINITE) != 0;
}
static int pthread_cond_destroy(pthread_cond_t *cond)
diff --git a/lib/init.c b/lib/init.c
index 399aeaa..021f38c 100644
--- a/lib/init.c
+++ b/lib/init.c
@@ -28,7 +28,7 @@ static void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup)
#include "queue.c"
#if defined(_WIN32)
-__declspec(dllexport) int luaopen_libthreads(lua_State *L)
+__declspec(dllexport) int _cdecl luaopen_libthreads(lua_State *L)
#else
int luaopen_libthreads(lua_State *L)
#endif
diff --git a/lib/thread-main.c b/lib/thread-main.c
index 5008a07..ee54748 100644
--- a/lib/thread-main.c
+++ b/lib/thread-main.c
@@ -35,7 +35,7 @@ static int runthread(void *code_)
}
#if defined(_WIN32)
-__declspec(dllexport) void* THThread_main(void *arg)
+__declspec(dllexport) void* _cdecl THThread_main(void *arg)
#else
void* THThread_main(void *arg)
#endif
diff --git a/rocks/threads-scm-1.rockspec b/rocks/threads-scm-1.rockspec
index c9f01f0..9765d4a 100644
--- a/rocks/threads-scm-1.rockspec
+++ b/rocks/threads-scm-1.rockspec
@@ -21,10 +21,23 @@ dependencies = {
}
build = {
- type = "cmake",
- variables = {
- CMAKE_BUILD_TYPE="Release",
- CMAKE_PREFIX_PATH="$(LUA_BINDIR)/..",
- CMAKE_INSTALL_PREFIX="$(PREFIX)"
- }
+ type = "command",
+ build_command = [[
+cmake -E make_directory build && cd build && cmake .. -DLUALIB=$(LUALIB) -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE)
+ ]],
+ platforms = {
+ windows = {
+ -- example with dlfcn-win
+ -- luarocks make rocks\threads-scm-1.rockspec WIN_DLFCN_INCDIR="D:\Libraries\include" WIN_DLFCN_LIBDIR="D:\Libraries\lib"
+ build_command = [[
+cmake -E make_directory build && cd build && cmake .. -G "NMake Makefiles" -DWIN_DLFCN_INCDIR="$(WIN_DLFCN_INCDIR)" -DWIN_DLFCN_LIBDIR="$(WIN_DLFCN_LIBDIR)" -DLUALIB=$(LUALIB) -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE)
+]]
+ -- example with dlfcn-win and pthread-win
+ -- luarocks make rocks\threads-scm-1.rockspec WIN_DLFCN_INCDIR="D:\Libraries\include" WIN_DLFCN_LIBDIR="D:\Libraries\lib" CMAKE_HAVE_PTHREAD_H="D:\Libraries\include" CMAKE_HAVE_LIBC_CREATE="D:\Libraries\lib\pthreadVC2.lib" PTHREAD_LIB_NAME="pthreadVC2"
+ -- build_command = [[
+-- cmake -E make_directory build && cd build && cmake .. -G "NMake Makefiles" -DWIN_DLFCN_INCDIR="$(WIN_DLFCN_INCDIR)" -DWIN_DLFCN_LIBDIR="$(WIN_DLFCN_LIBDIR)" -DUSE_PTHREAD_THREADS=1 -DCMAKE_HAVE_PTHREAD_H="$(CMAKE_HAVE_PTHREAD_H" -DCMAKE_HAVE_LIBC_CREATE="$(CMAKE_HAVE_LIBC_CREATE)" -DPTHREAD_LIB_NAME="$(PTHREAD_LIB_NAME)" -DLUALIB=$(LUALIB) -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE)
+-- ]]
+ }
+ },
+ install_command = "cd build && $(MAKE) install"
}