Advertisement
airevent

lua pthreads

Jan 30th, 2012
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 23.39 KB | None | 0 0
  1. diff -ruN lua-5.2.0/src/lauxlib.c lua-5.2.0-orig/src/lauxlib.c
  2. --- lua-5.2.0/src/lauxlib.c 2012-01-30 10:57:52.612261396 +0400
  3. +++ lua-5.2.0-orig/src/lauxlib.c    2011-12-06 20:33:55.000000000 +0400
  4. @@ -22,7 +22,6 @@
  5.  #include "lua.h"
  6.  
  7.  #include "lauxlib.h"
  8. -#include "lctype.h"
  9.  
  10.  
  11.  /*
  12. @@ -956,69 +955,3 @@
  13.    lua_pop(L, 1);
  14.  }
  15.  
  16. -
  17. -
  18. -// show stack usage: elements count, types, values
  19. -LUALIB_API void lua_print_stack( lua_State *L ) {
  20. -   int stack_size = lua_gettop(L);
  21. -   int type;
  22. -   const char * str;
  23. -   size_t len;
  24. -  
  25. -   printf("%d element(s) in stack %p\n", stack_size, (void *)L);
  26. -  
  27. -   for ( int i=1; i<=stack_size; ++i ) {
  28. -       type = lua_type(L, i);
  29. -       printf("    %d. %s => ", i, lua_typename(L, type));
  30. -      
  31. -       switch ( type ) {
  32. -           case LUA_TNIL:
  33. -               printf("nil\n");
  34. -               break;
  35. -           case LUA_TNUMBER:
  36. -               printf("%.14g\n", lua_tonumber(L, i));
  37. -               break;
  38. -           case LUA_TBOOLEAN:
  39. -               printf("%s\n", lua_toboolean(L, i)?"true":"false");
  40. -               break;
  41. -           case LUA_TSTRING:
  42. -               str = lua_tolstring(L, i, &len);
  43. -               putchar('"');
  44. -               lua_print_string(str, len);
  45. -               printf("\" (len:%lu)\n", len);
  46. -               break;
  47. -           default:
  48. -               printf("%p\n", lua_topointer(L, i));
  49. -       }
  50. -   }
  51. -}
  52. -
  53. -
  54. -
  55. -// print string to stdout, escape special chars, no newline (\n) at end
  56. -LUALIB_API void lua_print_string( const char * str, size_t len ) {
  57. -   unsigned char c;
  58. -  
  59. -   for ( size_t i=0; i<len; ++i ) {
  60. -       c = (unsigned char)str[i];
  61. -      
  62. -       switch ( c ) {
  63. -           case '"':  printf("\\\""); break;
  64. -           case '\\': printf("\\\\"); break;
  65. -           case '\a': printf("\\a"); break;
  66. -           case '\b': printf("\\b"); break;
  67. -           case '\f': printf("\\f"); break;
  68. -           case '\n': printf("\\n"); break;
  69. -           case '\r': printf("\\r"); break;
  70. -           case '\t': printf("\\t"); break;
  71. -           case '\v': printf("\\v"); break;
  72. -           default:
  73. -               if ( c > 127 || lisprint(c) ) {
  74. -                   putchar(c); // > 127 is for unicode multibyte symbols
  75. -               } else {
  76. -                   printf("\\%d", c);
  77. -               }
  78. -       }
  79. -   }
  80. -}
  81. -
  82. diff -ruN lua-5.2.0/src/lauxlib.h lua-5.2.0-orig/src/lauxlib.h
  83. --- lua-5.2.0/src/lauxlib.h 2012-01-11 08:59:47.855937521 +0400
  84. +++ lua-5.2.0-orig/src/lauxlib.h    2011-11-29 19:55:08.000000000 +0400
  85. @@ -26,13 +26,6 @@
  86.  } luaL_Reg;
  87.  
  88.  
  89. -
  90. -/* luauser functions */
  91. -LUALIB_API void (lua_print_stack) ( lua_State *L );
  92. -LUALIB_API void (lua_print_string) ( const char * str, size_t len );
  93. -
  94. -
  95. -
  96.  LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver);
  97.  #define luaL_checkversion(L)   luaL_checkversion_(L, LUA_VERSION_NUM)
  98.  
  99. diff -ruN lua-5.2.0/src/linit.c lua-5.2.0-orig/src/linit.c
  100. --- lua-5.2.0/src/linit.c   2012-01-05 16:17:15.993387384 +0400
  101. +++ lua-5.2.0-orig/src/linit.2011-04-08 23:17:36.000000000 +0400
  102. @@ -37,7 +37,6 @@
  103.    {LUA_BITLIBNAME, luaopen_bit32},
  104.    {LUA_MATHLIBNAME, luaopen_math},
  105.    {LUA_DBLIBNAME, luaopen_debug},
  106. -  {LUA_THREADLIBNAME, luaopen_thread},
  107.    {NULL, NULL}
  108.  };
  109.  
  110. diff -ruN lua-5.2.0/src/lstate.c lua-5.2.0-orig/src/lstate.c
  111. --- lua-5.2.0/src/lstate.c  2012-01-29 11:22:26.868043304 +0400
  112. +++ lua-5.2.0-orig/src/lstate.c 2011-10-03 21:54:25.000000000 +0400
  113. @@ -277,7 +277,6 @@
  114.  
  115.  
  116.  LUA_API void lua_close (lua_State *L) {
  117. -  luai_userstatewait(L);
  118.    L = G(L)->mainthread;  /* only the main thread can be closed */
  119.    lua_lock(L);
  120.    luai_userstateclose(L);
  121. diff -ruN lua-5.2.0/src/lthread.c lua-5.2.0-orig/src/lthread.c
  122. --- lua-5.2.0/src/lthread.c 2012-01-30 11:00:29.452852706 +0400
  123. +++ lua-5.2.0-orig/src/lthread.c    1970-01-01 03:00:00.000000000 +0300
  124. @@ -1,210 +0,0 @@
  125. -#include "lthread.h"
  126. -
  127. -
  128. -
  129. -LUAMOD_API int luaopen_thread( lua_State *L ) {
  130. -   lua_newmt(L, MT_THREAD, thread_index, thread_gc);
  131. -   lua_newmt(L, MT_MUTEX, mutex_index, thread_mutex_gc);
  132. -   lua_newmt(L, MT_COND, cond_index, thread_cond_gc);
  133. -  
  134. -   lua_newtable(L); // keeps thread list for joining with main thread
  135. -   lua_setfield(L, LUA_REGISTRYINDEX, LUA_TLIST_NAME);
  136. -  
  137. -   lua_register(L, "sleep", thread_sleep);
  138. -   luaL_newlib(L, _index);
  139. -   return 1;
  140. -}
  141. -
  142. -
  143. -
  144. -// some code is borrowed from Diego Nehab luathread
  145. -static int thread_create( lua_State *L ) {
  146. -   luaL_checktype(L, 1, LUA_TFUNCTION); // функция для исполнения потоком
  147. -   luaL_checktype(L, 2, LUA_TTABLE); // аргументы функции в таблице
  148. -   lua_settop(L, 2); // удалить лишнее из стека L
  149. -  
  150. -   lua_State * child = lua_newthread(L); // создать lua стек
  151. -   pthread_attr_t attr;
  152. -  
  153. -   lua_insert(L, -3); // поместить стек перед функцией и таблицей
  154. -   lua_xmove(L, child, 2); // переместить функцию и таблицу в стек child
  155. -  
  156. -   // index key name
  157. -   lua_pushvalue(L, -1);
  158. -   lua_pushlightuserdata(L, child);
  159. -   lua_insert(L, -2);
  160. -   lua_settable(L, LUA_REGISTRYINDEX);
  161. -  
  162. -   // make userdata for thread
  163. -   lua_newud(L, data, thread_ud);
  164. -   data->state = child;
  165. -   luaL_setmetatable(L, MT_THREAD);
  166. -  
  167. -   // clone userdata to the top
  168. -   lua_pushvalue(L, -1);
  169. -   lua_insert(L, -3);
  170. -  
  171. -   // LUA_REGISTRYINDEX[LUA_TLIST_NAME][thread] = userdata
  172. -   lua_getfield(L, LUA_REGISTRYINDEX, LUA_TLIST_NAME);
  173. -   lua_insert(L, -3);
  174. -   lua_settable(L, -3);
  175. -   lua_settop(L, 1); // remove LUA_TLIST_NAME from current stack
  176. -  
  177. -   pthread_attr_init(&attr);
  178. -   pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
  179. -  
  180. -   // launch thread execution
  181. -   int r = pthread_create(&data->thread, &attr, thread_create_worker, data);
  182. -   if ( r != 0 ) {
  183. -       lua_thread_end(L, data);
  184. -       lua_fail(L, "Cant create posix thread", r);
  185. -   }
  186. -  
  187. -   pthread_attr_destroy(&attr);
  188. -  
  189. -   return 1; // return userdata to user
  190. -}
  191. -
  192. -
  193. -
  194. -// some code is borrowed from Diego Nehab luathread
  195. -static void * thread_create_worker( void * arg ) {
  196. -   pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
  197. -  
  198. -   thread_ud * data = (thread_ud *)arg;
  199. -   lua_State * L = data->state;
  200. -  
  201. -   lua_insert(L, -2); // now: table index = 1, function index = 2
  202. -  
  203. -   // unpack table in stack
  204. -   int n = 1;
  205. -   while ( 1 ) {
  206. -       lua_rawgeti(L, 1, n++);
  207. -       if ( lua_isnil(L, -1) ) break;
  208. -   }
  209. -  
  210. -   lua_remove(L, -1); // remove nil (always exists after last lua_rawgeti)
  211. -   lua_remove(L, 1); // remove table
  212. -  
  213. -   int r = lua_pcall(L, lua_gettop(L)-1, 0, 0); // protected call
  214. -   if ( r != 0 ) printf("Fail in thread %p: %s\n", L, lua_tostring(L, -1));
  215. -  
  216. -   lua_thread_end(L, data);
  217. -   pthread_exit(NULL);
  218. -}
  219. -
  220. -
  221. -
  222. -static int thread_stop( lua_State *L ) {
  223. -   lua_checkud(L, data, thread_ud, 1, MT_THREAD);
  224. -   lua_lock(L);
  225. -   pthread_cancel(data->thread);
  226. -   lua_unlock(L);
  227. -   lua_thread_end(L, data);
  228. -   return 0;
  229. -}
  230. -
  231. -
  232. -
  233. -static int thread_gc( lua_State *L ) {
  234. -   return 0;
  235. -}
  236. -
  237. -
  238. -
  239. -static int thread_mutex( lua_State *L ) {
  240. -   lua_newud(L, data, mutex_ud);
  241. -   pthread_mutex_init(&data->mutex, NULL);
  242. -   luaL_setmetatable(L, MT_MUTEX);
  243. -   return 1;
  244. -}
  245. -
  246. -
  247. -
  248. -static int thread_mutex_gc( lua_State *L ) {
  249. -   lua_toud(L, data, mutex_ud, 1);
  250. -   pthread_mutex_destroy(&data->mutex);
  251. -   return 0;
  252. -}
  253. -
  254. -
  255. -
  256. -static int thread_mutex_lock( lua_State *L ) {
  257. -   lua_toud(L, data, mutex_ud, 1);
  258. -   pthread_mutex_lock(&data->mutex);
  259. -   return 0;
  260. -}
  261. -
  262. -
  263. -
  264. -static int thread_mutex_unlock( lua_State *L ) {
  265. -   lua_toud(L, data, mutex_ud, 1);
  266. -   pthread_mutex_unlock(&data->mutex);
  267. -   return 0;
  268. -}
  269. -
  270. -
  271. -
  272. -static int thread_cond( lua_State *L ) {
  273. -   lua_newud(L, data, cond_ud);
  274. -   pthread_cond_init(&data->cond, NULL);
  275. -   luaL_setmetatable(L, MT_COND);
  276. -   return 1;
  277. -}
  278. -
  279. -
  280. -
  281. -static int thread_cond_gc( lua_State *L ) {
  282. -   lua_toud(L, data, cond_ud, 1);
  283. -   pthread_cond_destroy(&data->cond);
  284. -   return 0;
  285. -}
  286. -
  287. -
  288. -
  289. -static int thread_cond_signal( lua_State *L ) {
  290. -   lua_toud(L, data, cond_ud, 1);
  291. -   pthread_cond_signal(&data->cond);
  292. -   return 0;
  293. -}
  294. -
  295. -
  296. -
  297. -static int thread_cond_broadcast( lua_State *L ) {
  298. -   lua_toud(L, data, cond_ud, 1);
  299. -   pthread_cond_broadcast(&data->cond);
  300. -   return 0;
  301. -}
  302. -
  303. -
  304. -
  305. -static int thread_cond_wait( lua_State *L ) {
  306. -   lua_toud(L, cdata, cond_ud, 1);
  307. -   lua_toud(L, mdata, mutex_ud, 2);
  308. -   pthread_cond_wait(&cdata->cond, &mdata->mutex);
  309. -   return 0;
  310. -}
  311. -
  312. -
  313. -
  314. -static int thread_join( lua_State *L ) {
  315. -   lua_checkud(L, data, thread_ud, 1, MT_THREAD);
  316. -   void * status;
  317. -  
  318. -   int r = pthread_join(data->thread, &status);
  319. -   if ( r != 0 ) lua_fail(L, "Join failed", r);
  320. -  
  321. -   lua_pushboolean(L, 1);
  322. -   return 1;
  323. -}
  324. -
  325. -
  326. -
  327. -static int thread_sleep( lua_State *L ) {
  328. -   struct timespec t;
  329. -   t.tv_sec  = luaL_optint(L, 1, 0); // секунды (миллион микросекунд)
  330. -   t.tv_nsec = luaL_optlong(L, 2, 0)*1000; // микросекунды (max 999999)
  331. -   clock_nanosleep(CLOCK_MONOTONIC, 0, &t, &t);
  332. -   return 0;
  333. -}
  334. -
  335. diff -ruN lua-5.2.0/src/lthread.h lua-5.2.0-orig/src/lthread.h
  336. --- lua-5.2.0/src/lthread.h 2012-01-30 10:49:49.711200963 +0400
  337. +++ lua-5.2.0-orig/src/lthread.h    1970-01-01 03:00:00.000000000 +0300
  338. @@ -1,92 +0,0 @@
  339. -// Lua pthreads
  340. -
  341. -#include "luauser.h"
  342. -#include <time.h>
  343. -
  344. -
  345. -
  346. -#define MT_THREAD "mt.thread"
  347. -#define MT_MUTEX  "mt.mutex"
  348. -#define MT_COND   "mt.cond"
  349. -
  350. -
  351. -
  352. -// поток отработал - удалить из REGISTRYINDEX (LRI) всё, что с ним связано
  353. -// LRI.tlist.thread = ud
  354. -// LRI.lightud = thread
  355. -#define lua_thread_end( L, data ) { \
  356. -   /* remove LUA_REGISTRYINDEX[LUA_TLIST_NAME][thread] */ \
  357. -   lua_getfield(L, LUA_REGISTRYINDEX, LUA_TLIST_NAME); \
  358. -   lua_pushlightuserdata(L, data->state); \
  359. -   lua_gettable(L, LUA_REGISTRYINDEX); \
  360. -   lua_pushnil(L); \
  361. -   lua_settable(L, -3); \
  362. -   lua_remove(L, -1); \
  363. -   /* remove LUA_REGISTRYINDEX[lightud] */ \
  364. -   lua_pushlightuserdata(L, data->state); \
  365. -   lua_pushnil(L); \
  366. -   lua_settable(L, LUA_REGISTRYINDEX); \
  367. -}
  368. -
  369. -
  370. -
  371. -// userdata for thread is defined in luauser.h
  372. -
  373. -typedef struct mutex_ud {
  374. -   pthread_mutex_t mutex;
  375. -} mutex_ud;
  376. -
  377. -typedef struct cond_ud {
  378. -   pthread_cond_t cond;
  379. -} cond_ud;
  380. -
  381. -
  382. -
  383. -static int thread_create( lua_State *L );
  384. -static int thread_sleep( lua_State *L );
  385. -static int thread_join( lua_State *L );
  386. -static int thread_stop( lua_State *L );
  387. -static int thread_gc( lua_State *L );
  388. -
  389. -static int thread_mutex( lua_State *L );
  390. -static int thread_mutex_lock( lua_State *L );
  391. -static int thread_mutex_unlock( lua_State *L );
  392. -static int thread_mutex_gc( lua_State *L );
  393. -
  394. -static int thread_cond( lua_State *L );
  395. -static int thread_cond_wait( lua_State *L );
  396. -static int thread_cond_signal( lua_State *L );
  397. -static int thread_cond_broadcast( lua_State *L );
  398. -static int thread_cond_gc( lua_State *L );
  399. -
  400. -static void * thread_create_worker( void * arg );
  401. -
  402. -
  403. -
  404. -static const luaL_Reg _index[] = {
  405. -   {"create", thread_create},
  406. -   {"join",   thread_join},
  407. -   {"sleep",  thread_sleep},
  408. -   {"mutex",  thread_mutex},
  409. -   {"cond",   thread_cond},
  410. -   {NULL, NULL}
  411. -};
  412. -
  413. -static const luaL_Reg thread_index[] = {
  414. -   {"stop", thread_stop},
  415. -   {NULL, NULL}
  416. -};
  417. -
  418. -static const luaL_Reg mutex_index[] = {
  419. -   {"lock",   thread_mutex_lock},
  420. -   {"unlock", thread_mutex_unlock},
  421. -   {NULL, NULL}
  422. -};
  423. -
  424. -static const luaL_Reg cond_index[] = {
  425. -   {"wait",      thread_cond_wait},
  426. -   {"signal",    thread_cond_signal},
  427. -   {"broadcast", thread_cond_broadcast},
  428. -   {NULL, NULL}
  429. -};
  430. -
  431. diff -ruN lua-5.2.0/src/lua.c lua-5.2.0-orig/src/lua.c
  432. --- lua-5.2.0/src/lua.c 2012-01-30 10:03:25.096816394 +0400
  433. +++ lua-5.2.0-orig/src/lua.c    2011-12-12 20:34:03.000000000 +0400
  434. @@ -496,7 +496,6 @@
  435.    result = lua_toboolean(L, -1);  /* get result */
  436.    finalreport(L, status);
  437.    lua_close(L);
  438. -  //return (result && status == LUA_OK) ? EXIT_SUCCESS : EXIT_FAILURE;
  439. -  pthread_exit(NULL);
  440. +  return (result && status == LUA_OK) ? EXIT_SUCCESS : EXIT_FAILURE;
  441.  }
  442.  
  443. diff -ruN lua-5.2.0/src/luaconf.h lua-5.2.0-orig/src/luaconf.h
  444. --- lua-5.2.0/src/luaconf.h 2012-01-05 15:44:57.616744350 +0400
  445. +++ lua-5.2.0-orig/src/luaconf.h    2011-12-06 20:58:36.000000000 +0400
  446. @@ -83,21 +83,32 @@
  447.  ** CHANGE them if your machine has a non-conventional directory
  448.  ** hierarchy or if you want to install your libraries in
  449.  ** non-conventional directories.
  450. +*/
  451. +#if defined(_WIN32)    /* { */
  452. +/*
  453.  ** In Windows, any exclamation mark ('!') in the path is replaced by the
  454.  ** path of the directory of the executable file of the current process.
  455.  */
  456. -/* set by Makefile */
  457. -#ifndef LUA_PATH_DEFAULT /* { */
  458. -#ifndef LUA_CPATH_DEFAULT /* { */
  459. -   #if defined(_WIN32) /* { */
  460. -       #define LUA_PATH_DEFAULT ".\\?.lua"
  461. -       #define LUA_CPATH_DEFAULT ".\\?.dll"
  462. -   #else /* }{ */
  463. -       #define LUA_PATH_DEFAULT "./?.lua"
  464. -       #define LUA_CPATH_DEFAULT "./?.so"
  465. -   #endif /* } */
  466. -#endif /* } */
  467. -#endif /* } */
  468. +#define LUA_LDIR   "!\\lua\\"
  469. +#define LUA_CDIR   "!\\"
  470. +#define LUA_PATH_DEFAULT  \
  471. +       LUA_LDIR"?.lua;"  LUA_LDIR"?\\init.lua;" \
  472. +       LUA_CDIR"?.lua;"  LUA_CDIR"?\\init.lua;" ".\\?.lua"
  473. +#define LUA_CPATH_DEFAULT \
  474. +       LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll;" ".\\?.dll"
  475. +
  476. +#else          /* }{ */
  477. +
  478. +#define LUA_VDIR   LUA_VERSION_MAJOR "." LUA_VERSION_MINOR "/"
  479. +#define LUA_ROOT   "/usr/local/"
  480. +#define LUA_LDIR   LUA_ROOT "share/lua/" LUA_VDIR
  481. +#define LUA_CDIR   LUA_ROOT "lib/lua/" LUA_VDIR
  482. +#define LUA_PATH_DEFAULT  \
  483. +       LUA_LDIR"?.lua;"  LUA_LDIR"?/init.lua;" \
  484. +       LUA_CDIR"?.lua;"  LUA_CDIR"?/init.lua;" "./?.lua"
  485. +#define LUA_CPATH_DEFAULT \
  486. +       LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so"
  487. +#endif         /* } */
  488.  
  489.  
  490.  /*
  491. @@ -227,7 +238,7 @@
  492.  ** to fit your specific needs.
  493.  */
  494.  #if defined(LUA_COMPAT_ALL)    /* { */
  495. -#error Compatibility options are forbidden, edit luaconf.h to get them back
  496. +
  497.  /*
  498.  @@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'.
  499.  ** You can replace it with 'table.unpack'.
  500. diff -ruN lua-5.2.0/src/lualib.h lua-5.2.0-orig/src/lualib.h
  501. --- lua-5.2.0/src/lualib.h  2012-01-05 16:19:07.929649963 +0400
  502. +++ lua-5.2.0-orig/src/lualib.h 2011-12-08 16:11:37.000000000 +0400
  503. @@ -41,9 +41,6 @@
  504.  #define LUA_LOADLIBNAME    "package"
  505.  LUAMOD_API int (luaopen_package) (lua_State *L);
  506.  
  507. -#define LUA_THREADLIBNAME "thread"
  508. -LUAMOD_API int (luaopen_thread) (lua_State *L);
  509. -
  510.  
  511.  /* open all previous libraries */
  512.  LUALIB_API void (luaL_openlibs) (lua_State *L);
  513. diff -ruN lua-5.2.0/src/luauser.h lua-5.2.0-orig/src/luauser.h
  514. --- lua-5.2.0/src/luauser.h 2012-01-30 11:03:25.007290373 +0400
  515. +++ lua-5.2.0-orig/src/luauser.h    1970-01-01 03:00:00.000000000 +0300
  516. @@ -1,91 +0,0 @@
  517. -/* thread safety for Lua */
  518. -/* custom macro for lua modules */
  519. -/* some code is borrowed from Diego Nehab luathread */
  520. -
  521. -#ifndef luauser_h
  522. -#define luauser_h
  523. -
  524. -#include <pthread.h>
  525. -#include <stdlib.h>
  526. -#include "lauxlib.h"
  527. -
  528. -typedef struct lua_extra_data { /* every main lua state have this data */
  529. -   pthread_mutex_t mutex; /* exclusive access to critical sections */
  530. -} lua_extra_data;
  531. -
  532. -typedef struct thread_ud { /* thread userdata */
  533. -   pthread_t thread;
  534. -   lua_State * state; /* personal state */
  535. -} thread_ud;
  536. -
  537. -#define LUA_TLIST_NAME "__threads" /* table name in registry index for threads */
  538. -#define LUAI_EXTRASPACE sizeof(lua_extra_data *)
  539. -
  540. -#define lua_extra(L) (*((lua_extra_data **)(((char *)L)-LUAI_EXTRASPACE)))
  541. -#define lua_extra_mutex(L) (&(lua_extra(L)->mutex))
  542. -
  543. -#define lua_lock(L) pthread_mutex_lock(lua_extra_mutex(L))
  544. -#define lua_unlock(L) pthread_mutex_unlock(lua_extra_mutex(L))
  545. -
  546. -#define luai_userstateopen(L) { \
  547. -   lua_extra(L) = (lua_extra_data *)malloc(sizeof(lua_extra_data)); \
  548. -   pthread_mutex_init(lua_extra_mutex(L), NULL); \
  549. -}
  550. -
  551. -#define luai_userstateclose(L) { \
  552. -   pthread_mutex_unlock(lua_extra_mutex(L)); \
  553. -   pthread_mutex_destroy(lua_extra_mutex(L)); \
  554. -   free(lua_extra(L)); \
  555. -}
  556. -
  557. -#define luai_userstatethread(L, L1) { \
  558. -   lua_extra(L1) = lua_extra(L); \
  559. -}
  560. -
  561. -/* waits for all child threads by joining */
  562. -#define luai_userstatewait(L) { \
  563. -   thread_ud * data; /* points to stack element */ \
  564. -   void * status; /* join status (pointer type) */ \
  565. -   lua_getfield(L, LUA_REGISTRYINDEX, LUA_TLIST_NAME); \
  566. -   if ( !lua_isnil(L, -1) ) { /* thread lib exists */ \
  567. -       lua_pushnil(L); \
  568. -       while ( lua_next(L, -2) ) { \
  569. -           data = (thread_ud *)lua_touserdata(L, -1); \
  570. -           pthread_join(data->thread, &status); \
  571. -           lua_pop(L, 1); \
  572. -       } \
  573. -   } \
  574. -}
  575. -
  576. -/* some useful macros */
  577. -
  578. -#define lua_fail( L, errstr, errno ) { \
  579. -   lua_pushnil(L); \
  580. -   lua_pushstring(L, errstr); \
  581. -   lua_pushnumber(L, errno); \
  582. -   return 3; \
  583. -}
  584. -
  585. -#define lua_errno(L) \
  586. -   lua_fail(L, strerror(errno), errno)
  587. -
  588. -#define lua_newmt( L, name, __index, __gc ) { \
  589. -   luaL_newmetatable(L, name); \
  590. -   luaL_newlib(L, __index); \
  591. -   lua_setfield(L, -2, "__index"); \
  592. -   lua_pushcfunction(L, __gc); \
  593. -   lua_setfield(L, -2, "__gc"); \
  594. -   lua_remove(L, -1); \
  595. -}
  596. -
  597. -#define lua_newud( L, data, type ) \
  598. -   type * data = (type *)lua_newuserdata(L, sizeof(type))
  599. -
  600. -#define lua_toud( L, data, type, index ) \
  601. -   type * data = (type *)lua_touserdata(L, index)
  602. -
  603. -#define lua_checkud( L, data, type, index, udtype ) \
  604. -   type * data = (type *)luaL_checkudata(L, index, udtype)
  605. -
  606. -#endif
  607. -
  608. diff -ruN lua-5.2.0/src/Makefile lua-5.2.0-orig/src/Makefile
  609. --- lua-5.2.0/src/Makefile  2012-01-19 23:17:46.119687699 +0400
  610. +++ lua-5.2.0-orig/src/Makefile 2011-09-19 16:45:14.000000000 +0400
  611. @@ -7,7 +7,7 @@
  612.  PLAT= none
  613.  
  614.  CC= gcc
  615. -CFLAGS= -O2 -Wall $(SYSCFLAGS) $(MYCFLAGS)
  616. +CFLAGS= -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)
  617.  LDFLAGS= $(SYSLDFLAGS) $(MYLDFLAGS)
  618.  LIBS= -lm $(SYSLIBS) $(MYLIBS)
  619.  
  620. @@ -19,14 +19,9 @@
  621.  SYSLDFLAGS=
  622.  SYSLIBS=
  623.  
  624. -LUAUSER=luauser.h
  625. -
  626. -MYCFLAGS= -Werror -march=native -finline-functions -std=gnu99 \
  627. -   -D"LUA_PATH_DEFAULT=\"$(lua_path)\"" \
  628. -   -D"LUA_CPATH_DEFAULT=\"$(lua_cpath)\"" \
  629. -   -D"LUA_USER_H=\"$(LUAUSER)\""
  630. -MYLDFLAGS= -s
  631. -MYLIBS= -pthread -lrt
  632. +MYCFLAGS=
  633. +MYLDFLAGS=
  634. +MYLIBS=
  635.  MYOBJS=
  636.  
  637.  # == END OF USER SETTINGS -- NO NEED TO CHANGE ANYTHING BELOW THIS LINE =======
  638. @@ -38,7 +33,7 @@
  639.     lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \
  640.     ltm.o lundump.o lvm.o lzio.o
  641.  LIB_O= lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o \
  642. -   lmathlib.o loslib.o lstrlib.o ltablib.o loadlib.o linit.o lthread.o
  643. +   lmathlib.o loslib.o lstrlib.o ltablib.o loadlib.o linit.o
  644.  BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS)
  645.  
  646.  LUA_T= lua
  647. @@ -132,65 +127,61 @@
  648.  
  649.  lapi.o: lapi.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h ltm.h \
  650.   lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h lstring.h ltable.h lundump.h \
  651. - lvm.h $(LUAUSER)
  652. -lauxlib.o: lauxlib.c lua.h luaconf.h lauxlib.h lctype.h $(LUAUSER)
  653. -lbaselib.o: lbaselib.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  654. -lbitlib.o: lbitlib.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  655. + lvm.h
  656. +lauxlib.o: lauxlib.c lua.h luaconf.h lauxlib.h
  657. +lbaselib.o: lbaselib.c lua.h luaconf.h lauxlib.h lualib.h
  658. +lbitlib.o: lbitlib.c lua.h luaconf.h lauxlib.h lualib.h
  659.  lcode.o: lcode.c lua.h luaconf.h lcode.h llex.h lobject.h llimits.h \
  660.   lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h lgc.h \
  661. - lstring.h ltable.h lvm.h $(LUAUSER)
  662. -lcorolib.o: lcorolib.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  663. -lctype.o: lctype.c lctype.h lua.h luaconf.h llimits.h $(LUAUSER)
  664. -ldblib.o: ldblib.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  665. + lstring.h ltable.h lvm.h
  666. +lcorolib.o: lcorolib.c lua.h luaconf.h lauxlib.h lualib.h
  667. +lctype.o: lctype.c lctype.h lua.h luaconf.h llimits.h
  668. +ldblib.o: ldblib.c lua.h luaconf.h lauxlib.h lualib.h
  669.  ldebug.o: ldebug.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h \
  670.   ltm.h lzio.h lmem.h lcode.h llex.h lopcodes.h lparser.h ldebug.h ldo.h \
  671. - lfunc.h lstring.h lgc.h ltable.h lvm.h $(LUAUSER)
  672. + lfunc.h lstring.h lgc.h ltable.h lvm.h
  673.  ldo.o: ldo.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h ltm.h \
  674.   lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h lopcodes.h lparser.h \
  675. - lstring.h ltable.h lundump.h lvm.h $(LUAUSER)
  676. + lstring.h ltable.h lundump.h lvm.h
  677.  ldump.o: ldump.c lua.h luaconf.h lobject.h llimits.h lstate.h ltm.h \
  678. - lzio.h lmem.h lundump.h $(LUAUSER)
  679. + lzio.h lmem.h lundump.h
  680.  lfunc.o: lfunc.c lua.h luaconf.h lfunc.h lobject.h llimits.h lgc.h \
  681. - lstate.h ltm.h lzio.h lmem.h $(LUAUSER)
  682. + lstate.h ltm.h lzio.h lmem.h
  683.  lgc.o: lgc.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \
  684. - lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h $(LUAUSER)
  685. -linit.o: linit.c lua.h luaconf.h lualib.h lauxlib.h $(LUAUSER)
  686. -liolib.o: liolib.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  687. + lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h
  688. +linit.o: linit.c lua.h luaconf.h lualib.h lauxlib.h
  689. +liolib.o: liolib.c lua.h luaconf.h lauxlib.h lualib.h
  690.  llex.o: llex.c lua.h luaconf.h lctype.h llimits.h ldo.h lobject.h \
  691. - lstate.h ltm.h lzio.h lmem.h llex.h lparser.h lstring.h lgc.h ltable.h \
  692. - $(LUAUSER)
  693. -lmathlib.o: lmathlib.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  694. + lstate.h ltm.h lzio.h lmem.h llex.h lparser.h lstring.h lgc.h ltable.h
  695. +lmathlib.o: lmathlib.c lua.h luaconf.h lauxlib.h lualib.h
  696.  lmem.o: lmem.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \
  697. - ltm.h lzio.h lmem.h ldo.h lgc.h $(LUAUSER)
  698. -loadlib.o: loadlib.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  699. + ltm.h lzio.h lmem.h ldo.h lgc.h
  700. +loadlib.o: loadlib.c lua.h luaconf.h lauxlib.h lualib.h
  701.  lobject.o: lobject.c lua.h luaconf.h lctype.h llimits.h ldebug.h lstate.h \
  702. - lobject.h ltm.h lzio.h lmem.h ldo.h lstring.h lgc.h lvm.h $(LUAUSER)
  703. -lopcodes.o: lopcodes.c lopcodes.h llimits.h lua.h luaconf.h $(LUAUSER)
  704. -loslib.o: loslib.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  705. + lobject.h ltm.h lzio.h lmem.h ldo.h lstring.h lgc.h lvm.h
  706. +lopcodes.o: lopcodes.c lopcodes.h llimits.h lua.h luaconf.h
  707. +loslib.o: loslib.c lua.h luaconf.h lauxlib.h lualib.h
  708.  lparser.o: lparser.c lua.h luaconf.h lcode.h llex.h lobject.h llimits.h \
  709.   lzio.h lmem.h lopcodes.h lparser.h ldebug.h lstate.h ltm.h ldo.h lfunc.h \
  710. - lstring.h lgc.h ltable.h $(LUAUSER)
  711. + lstring.h lgc.h ltable.h
  712.  lstate.o: lstate.c lua.h luaconf.h lapi.h llimits.h lstate.h lobject.h \
  713.   ltm.h lzio.h lmem.h ldebug.h ldo.h lfunc.h lgc.h llex.h lstring.h \
  714. - ltable.h $(LUAUSER)
  715. + ltable.h
  716.  lstring.o: lstring.c lua.h luaconf.h lmem.h llimits.h lobject.h lstate.h \
  717. - ltm.h lzio.h lstring.h lgc.h $(LUAUSER)
  718. -lstrlib.o: lstrlib.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  719. + ltm.h lzio.h lstring.h lgc.h
  720. +lstrlib.o: lstrlib.c lua.h luaconf.h lauxlib.h lualib.h
  721.  ltable.o: ltable.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h \
  722. - ltm.h lzio.h lmem.h ldo.h lgc.h lstring.h ltable.h lvm.h $(LUAUSER)
  723. -ltablib.o: ltablib.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  724. + ltm.h lzio.h lmem.h ldo.h lgc.h lstring.h ltable.h lvm.h
  725. +ltablib.o: ltablib.c lua.h luaconf.h lauxlib.h lualib.h
  726.  ltm.o: ltm.c lua.h luaconf.h lobject.h llimits.h lstate.h ltm.h lzio.h \
  727. - lmem.h lstring.h lgc.h ltable.h $(LUAUSER)
  728. -lua.o: lua.c lua.h luaconf.h lauxlib.h lualib.h $(LUAUSER)
  729. + lmem.h lstring.h lgc.h ltable.h
  730. +lua.o: lua.c lua.h luaconf.h lauxlib.h lualib.h
  731.  luac.o: luac.c lua.h luaconf.h lauxlib.h lobject.h llimits.h lstate.h \
  732. - ltm.h lzio.h lmem.h lundump.h ldebug.h lopcodes.h $(LUAUSER)
  733. + ltm.h lzio.h lmem.h lundump.h ldebug.h lopcodes.h
  734.  lundump.o: lundump.c lua.h luaconf.h ldebug.h lstate.h lobject.h \
  735. - llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lstring.h lgc.h lundump.h \
  736. - $(LUAUSER)
  737. + llimits.h ltm.h lzio.h lmem.h ldo.h lfunc.h lstring.h lgc.h lundump.h
  738.  lvm.o: lvm.c lua.h luaconf.h ldebug.h lstate.h lobject.h llimits.h ltm.h \
  739. - lzio.h lmem.h ldo.h lfunc.h lgc.h lopcodes.h lstring.h ltable.h lvm.h \
  740. - $(LUAUSER)
  741. + lzio.h lmem.h ldo.h lfunc.h lgc.h lopcodes.h lstring.h ltable.h lvm.h
  742.  lzio.o: lzio.c lua.h luaconf.h llimits.h lmem.h lstate.h lobject.h ltm.h \
  743. - lzio.h $(LUAUSER)
  744. -lthread.o: lthread.h $(LUAUSER)
  745. + lzio.h
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement