Skip to content

Commit acb24ba

Browse files
authored
Merge pull request #5061 from lethosor/le/lua-lock-recursive
Lua: switch to recursive mutex in lua_lock()
2 parents c0f208a + 7c1713f commit acb24ba

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

depends/lua/include/dfhack_llimits.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,17 @@ struct lua_extra_state {
5454
#define lua_lock(L) EnterCriticalSection(luai_mutex(L))
5555
#define lua_unlock(L) LeaveCriticalSection(luai_mutex(L))
5656
#else
57-
#define luai_userstateopen(L) luai_mutex(L) = (mutex_t*)malloc(sizeof(mutex_t)); *luai_mutex(L) = PTHREAD_MUTEX_INITIALIZER
58-
#define luai_userstateclose(L) lua_unlock(L); pthread_mutex_destroy(luai_mutex(L)); free(luai_mutex(L))
57+
#define luai_userstateopen(L) do { \
58+
luai_mutex(L) = (mutex_t*)malloc(sizeof(mutex_t)); \
59+
pthread_mutexattr_t attr; \
60+
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); \
61+
pthread_mutex_init(luai_mutex(L), &attr); \
62+
} while (0)
63+
#define luai_userstateclose(L) do { \
64+
lua_unlock(L); \
65+
pthread_mutex_destroy(luai_mutex(L)); \
66+
free(luai_mutex(L)); \
67+
} while (0)
5968
#define lua_lock(L) pthread_mutex_lock(luai_mutex(L))
6069
#define lua_unlock(L) pthread_mutex_unlock(luai_mutex(L))
6170
#endif

0 commit comments

Comments
 (0)