From 7f88923b40cf3d7730ab3e1843d42afc58840cb3 Mon Sep 17 00:00:00 2001 From: Kamil Cudnik Date: Thu, 9 Sep 2021 11:47:26 +0200 Subject: Lua: Use all characters to calculate string hash (#9449) For a lot of long strings which have same prefix which extends beyond hashing limit, there will be many hash collisions which result in performance degradation using commands like KEYS --- deps/lua/src/lstring.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'deps') diff --git a/deps/lua/src/lstring.c b/deps/lua/src/lstring.c index 49113151c..6a825f786 100644 --- a/deps/lua/src/lstring.c +++ b/deps/lua/src/lstring.c @@ -75,7 +75,7 @@ static TString *newlstr (lua_State *L, const char *str, size_t l, TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { GCObject *o; unsigned int h = cast(unsigned int, l); /* seed */ - size_t step = (l>>5)+1; /* if string is too long, don't hash all its chars */ + size_t step = 1; size_t l1; for (l1=l; l1>=step; l1-=step) /* compute hash */ h = h ^ ((h<<5)+(h>>2)+cast(unsigned char, str[l1-1])); -- cgit v1.2.1