BUG/MINOR: lua: fix missing lock protection on server.
To avoid inconsistencies server's attributes must be read or updated under lock.
This commit is contained in:
parent
e9fd6b5916
commit
8c4954c5c2
@ -587,7 +587,9 @@ int hlua_server_set_weight(lua_State *L)
|
|||||||
srv = hlua_check_server(L, 1);
|
srv = hlua_check_server(L, 1);
|
||||||
weight = luaL_checkstring(L, 2);
|
weight = luaL_checkstring(L, 2);
|
||||||
|
|
||||||
|
SPIN_LOCK(SERVER_LOCK, &srv->lock);
|
||||||
err = server_parse_weight_change_request(srv, weight);
|
err = server_parse_weight_change_request(srv, weight);
|
||||||
|
SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
|
||||||
if (!err)
|
if (!err)
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
else
|
else
|
||||||
@ -613,7 +615,9 @@ int hlua_server_set_addr(lua_State *L)
|
|||||||
srv = hlua_check_server(L, 1);
|
srv = hlua_check_server(L, 1);
|
||||||
addr = luaL_checkstring(L, 2);
|
addr = luaL_checkstring(L, 2);
|
||||||
|
|
||||||
|
SPIN_LOCK(SERVER_LOCK, &srv->lock);
|
||||||
err = server_parse_addr_change_request(srv, addr, "Lua script");
|
err = server_parse_addr_change_request(srv, addr, "Lua script");
|
||||||
|
SPIN_UNLOCK(SERVER_LOCK, &srv->lock);
|
||||||
if (!err)
|
if (!err)
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
else
|
else
|
||||||
@ -696,12 +700,12 @@ int hlua_server_check_force_up(lua_State *L)
|
|||||||
struct server *sv;
|
struct server *sv;
|
||||||
|
|
||||||
sv = hlua_check_server(L, 1);
|
sv = hlua_check_server(L, 1);
|
||||||
|
SPIN_LOCK(SERVER_LOCK, &sv->lock);
|
||||||
if (!(sv->track)) {
|
if (!(sv->track)) {
|
||||||
SPIN_LOCK(SERVER_LOCK, &sv->lock);
|
|
||||||
sv->check.health = sv->check.rise + sv->check.fall - 1;
|
sv->check.health = sv->check.rise + sv->check.fall - 1;
|
||||||
srv_set_running(sv, "changed from Lua script", NULL);
|
srv_set_running(sv, "changed from Lua script", NULL);
|
||||||
SPIN_UNLOCK(SERVER_LOCK, &sv->lock);
|
|
||||||
}
|
}
|
||||||
|
SPIN_UNLOCK(SERVER_LOCK, &sv->lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -710,12 +714,12 @@ int hlua_server_check_force_nolb(lua_State *L)
|
|||||||
struct server *sv;
|
struct server *sv;
|
||||||
|
|
||||||
sv = hlua_check_server(L, 1);
|
sv = hlua_check_server(L, 1);
|
||||||
|
SPIN_LOCK(SERVER_LOCK, &sv->lock);
|
||||||
if (!(sv->track)) {
|
if (!(sv->track)) {
|
||||||
SPIN_LOCK(SERVER_LOCK, &sv->lock);
|
|
||||||
sv->check.health = sv->check.rise + sv->check.fall - 1;
|
sv->check.health = sv->check.rise + sv->check.fall - 1;
|
||||||
srv_set_stopping(sv, "changed from Lua script", NULL);
|
srv_set_stopping(sv, "changed from Lua script", NULL);
|
||||||
SPIN_UNLOCK(SERVER_LOCK, &sv->lock);
|
|
||||||
}
|
}
|
||||||
|
SPIN_UNLOCK(SERVER_LOCK, &sv->lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user