mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2024-12-15 17:51:06 +00:00
fix: increase lua stack limit to 8KB (#3080)
Before that 'lua_checkstack(lua(), 7000)' would not pass because we limited lua stack to 4KB. 7000 is the max limit used by bullmq, so we raising it to support this case. Signed-off-by: Roman Gershman <roman@dragonflydb.io>
This commit is contained in:
parent
fd5ece09fb
commit
20c98c29c1
3 changed files with 23 additions and 49 deletions
|
@ -1,48 +0,0 @@
|
|||
diff --git a/luaconf.h b/luaconf.h
|
||||
index d42d14b7..75647e72 100644
|
||||
--- a/luaconf.h
|
||||
+++ b/luaconf.h
|
||||
@@ -731,7 +731,7 @@
|
||||
** (It must fit into max(size_t)/32.)
|
||||
*/
|
||||
#if LUAI_IS32INT
|
||||
-#define LUAI_MAXSTACK 1000000
|
||||
+#define LUAI_MAXSTACK 4096
|
||||
#else
|
||||
#define LUAI_MAXSTACK 15000
|
||||
#endif
|
||||
diff --git a/makefile b/makefile
|
||||
index d46e650c..c27e5677 100644
|
||||
--- a/makefile
|
||||
+++ b/makefile
|
||||
@@ -66,13 +66,26 @@ LOCAL = $(TESTS) $(CWARNS)
|
||||
|
||||
|
||||
# enable Linux goodies
|
||||
-MYCFLAGS= $(LOCAL) -std=c99 -DLUA_USE_LINUX -DLUA_USE_READLINE
|
||||
+MYCFLAGS= $(LOCAL) -std=c99 -g -O2 -DLUA_USE_LINUX
|
||||
-MYLDFLAGS= $(LOCAL) -Wl,-E
|
||||
+# Commenting out dynamic linking flags because we link statically
|
||||
+# and this does not work on MacOS: MYLDFLAGS= $(LOCAL) -Wl,-E
|
||||
-MYLIBS= -ldl -lreadline
|
||||
+MYLIBS= -ldl
|
||||
|
||||
+uname_m := $(shell uname -m)
|
||||
+
|
||||
+# equivalent to: if $(uname_m) == x86_64 || $(uname_m) == amd64
|
||||
+ifneq (, $(filter $(uname_m),x86_64 amd64))
|
||||
+OPTFLAGS= -march=sandybridge
|
||||
+else ifneq (, $(filter $(uname_m),aarch64 arm64))
|
||||
+OPTFLAGS= -march=armv8.2-a+fp16+rcpc+dotprod+crypto
|
||||
+else ifeq ($(uname_m), s390x)
|
||||
+OPTFLAGS= -march=native
|
||||
+else
|
||||
+ $(error ERROR: unknown architecture $(uname_m))
|
||||
+endif
|
||||
|
||||
CC= gcc
|
||||
-CFLAGS= -Wall -O2 $(MYCFLAGS) -fno-stack-protector -fno-common -march=native
|
||||
+CFLAGS= -Wall -O2 $(MYCFLAGS) -fno-stack-protector -fno-common $(OPTFLAGS)
|
||||
AR= ar rc
|
||||
RANLIB= ranlib
|
||||
RM= rm -f
|
|
@ -8,7 +8,7 @@ endif()
|
|||
add_third_party(
|
||||
lua
|
||||
GIT_REPOSITORY https://github.com/dragonflydb/lua
|
||||
GIT_TAG Dragonfly-5.4.6
|
||||
GIT_TAG Dragonfly-5.4.6a
|
||||
CONFIGURE_COMMAND echo
|
||||
BUILD_IN_SOURCE 1
|
||||
BUILD_COMMAND ${DFLY_TOOLS_MAKE} all
|
||||
|
|
|
@ -89,6 +89,7 @@ class InterpreterTest : public ::testing::Test {
|
|||
|
||||
void SetGlobalArray(const char* name, const vector<string_view>& vec);
|
||||
|
||||
// returns true if script run successfully.
|
||||
bool Execute(string_view script);
|
||||
|
||||
Interpreter intptr_;
|
||||
|
@ -492,4 +493,25 @@ TEST_F(InterpreterTest, Robust) {
|
|||
EXPECT_EQ("", ser_.res);
|
||||
}
|
||||
|
||||
TEST_F(InterpreterTest, Unpack) {
|
||||
auto cb = [](Interpreter::CallArgs ca) {
|
||||
auto* reply = ca.translator;
|
||||
reply->OnInt(1);
|
||||
};
|
||||
intptr_.SetRedisFunc(cb);
|
||||
ASSERT_TRUE(lua_checkstack(lua(), 7000));
|
||||
bool res = Execute(R"(
|
||||
local N = 7000
|
||||
|
||||
local stringTable = {}
|
||||
for i = 1, N do
|
||||
stringTable[i] = "String " .. i
|
||||
end
|
||||
return redis.pcall('func', unpack(stringTable))
|
||||
)");
|
||||
|
||||
ASSERT_TRUE(res) << error_;
|
||||
EXPECT_EQ("i(1)", ser_.res);
|
||||
}
|
||||
|
||||
} // namespace dfly
|
||||
|
|
Loading…
Reference in a new issue