diff options
author | antirez <antirez@gmail.com> | 2014-05-06 15:04:02 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2014-05-06 15:04:02 +0200 |
commit | 9cd4d9298e51c8a4b2e22dc7a1d54a81657fe3b0 (patch) | |
tree | f7fd1c12a444d59672fac354aee8461c46b1ede5 | |
parent | 2388e11e27973259ced8dc6c8abe382eed8683ab (diff) | |
download | redis-9cd4d9298e51c8a4b2e22dc7a1d54a81657fe3b0.tar.gz |
Scripting: Use faster API for Lua client c->argv creation.
Replace the three calls to Lua API lua_tostring, lua_lua_strlen,
and lua_isstring, with a single call to lua_tolstring.
~ 5% consistent speed gain measured.
-rw-r--r-- | src/scripting.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/scripting.c b/src/scripting.c index 7537f37de..918f61eac 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -226,9 +226,12 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) { } for (j = 0; j < argc; j++) { - if (!lua_isstring(lua,j+1)) break; - argv[j] = createStringObject((char*)lua_tostring(lua,j+1), - lua_strlen(lua,j+1)); + char *obj_s; + size_t obj_len; + + obj_s = (char*)lua_tolstring(lua,j+1,&obj_len); + if (obj_s == NULL) break; /* Not a string. */ + argv[j] = createStringObject(obj_s, obj_len); } /* Check if one of the arguments passed by the Lua script |