45 static Pool *luajit_states = NULL;
47 static int luajit_states_cnt = 0;
48 static int luajit_states_cnt_max = 0;
49 static int luajit_states_size = 0;
50 #define LUAJIT_DEFAULT_STATES 128
52 static void *LuaStatePoolAlloc(
void)
54 return luaL_newstate();
57 static void LuaStatePoolFree(
void *d)
69 int LuajitSetupStatesPool(
void)
72 pthread_mutex_lock(&luajit_states_lock);
74 if (luajit_states == NULL) {
81 if (denode->
val && strcmp(denode->
val,
"luajit-states") == 0) {
88 cnt = LUAJIT_DEFAULT_STATES;
90 luajit_states_size = cnt;
92 luajit_states =
PoolInit(0, cnt, 0, LuaStatePoolAlloc, NULL, NULL, NULL, LuaStatePoolFree);
93 if (luajit_states == NULL) {
94 SCLogError(
"luastate pool init failed, lua/luajit keywords won't work");
99 SCLogConfig(
"luajit states preallocated: %d", luajit_states_size);
103 pthread_mutex_unlock(&luajit_states_lock);
107 void LuajitFreeStatesPool(
void)
109 pthread_mutex_lock(&luajit_states_lock);
110 if (luajit_states_cnt_max > luajit_states_size) {
111 SCLogNotice(
"luajit states used %d is bigger than pool size %d. Set "
112 "luajit.states to %d to avoid memory issues. "
113 "See tickets #1577 and #1955.",
114 luajit_states_cnt_max, luajit_states_size, luajit_states_cnt_max);
117 luajit_states = NULL;
118 luajit_states_size = 0;
119 luajit_states_cnt = 0;
120 pthread_mutex_unlock(&luajit_states_lock);
126 pthread_mutex_lock(&luajit_states_lock);
127 if (luajit_states != NULL) {
130 if (luajit_states_cnt == luajit_states_size) {
132 "reached. Increase luajit.states config option. "
133 "See tickets #1577 and #1955",
138 if (luajit_states_cnt > luajit_states_cnt_max)
139 luajit_states_cnt_max = luajit_states_cnt;
142 pthread_mutex_unlock(&luajit_states_lock);
149 pthread_mutex_lock(&luajit_states_lock);
151 BUG_ON(luajit_states_cnt <= 0);
153 pthread_mutex_unlock(&luajit_states_lock);