summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-05-06 15:04:02 +0200
committerantirez <antirez@gmail.com>2014-05-07 16:12:32 +0200
commit1e4ba6e7e64afa5e94987c09ac69469209791203 (patch)
treef7fd1c12a444d59672fac354aee8461c46b1ede5
parent76fda9f8e10eb9cf1299fa6ca04f60d79462759e (diff)
downloadredis-1e4ba6e7e64afa5e94987c09ac69469209791203.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.c9
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