diff --git a/lualib-src/lua-cluster.c b/lualib-src/lua-cluster.c index c4875070..586f74bf 100644 --- a/lualib-src/lua-cluster.c +++ b/lualib-src/lua-cluster.c @@ -74,8 +74,9 @@ lpackrequest(lua_State *L) { return luaL_error(L, "Invalid request message"); } size_t sz = (size_t)luaL_checkinteger(L,4); - int session = luaL_checkinteger(L,2); + int session = luaL_optinteger(L,2,1); // new connection start with 1 if (session <= 0) { + skynet_free(msg); return luaL_error(L, "Invalid request session %d", session); } int addr_type = lua_type(L,1); diff --git a/service/clusterd.lua b/service/clusterd.lua index 12c4c4e7..3805be25 100644 --- a/service/clusterd.lua +++ b/service/clusterd.lua @@ -24,7 +24,6 @@ local function open_channel(t, key) } assert(c:connect(true)) t[key] = c - node_session[key] = 1 return c end @@ -63,11 +62,11 @@ function command.listen(source, addr, port) end local function send_request(source, node, addr, msg, sz) - local request - local c = node_channel[node] local session = node_session[node] -- msg is a local pointer, cluster.packrequest will free it - request, node_session[node] = cluster.packrequest(addr, session , msg, sz) + local request, new_session = cluster.packrequest(addr, session, msg, sz) + local c = node_channel[node] + node_session[node] = new_session return c:request(request, session) end