lxc_state_t states[MAX_STATE],
int *state_client_fd)
{
+ __do_close_prot_errno int clientfd = -EBADF;
int state, stopped;
ssize_t ret;
struct lxc_cmd_rr cmd = {
/* We should now be guaranteed to get an answer from the state sending
* function.
*/
- if (cmd.rsp.ret < 0) {
- errno = -cmd.rsp.ret;
+ clientfd = cmd.rsp.ret;
+ if (clientfd < 0) {
+ errno = -clientfd;
SYSERROR("Failed to receive socket fd");
return -1;
}
state = PTR_TO_INT(cmd.rsp.data);
if (state < MAX_STATE) {
TRACE("Container is already in requested state %s", lxc_state2str(state));
- close(cmd.rsp.ret);
return state;
}
- *state_client_fd = cmd.rsp.ret;
- TRACE("Added state client %d to state client list", cmd.rsp.ret);
+ *state_client_fd = steal_fd(clientfd);
+ TRACE("Added state client %d to state client list", *state_client_fd);
return MAX_STATE;
}