mirror of
https://github.com/checkpoint-restore/criu
synced 2025-09-04 08:15:37 +00:00
service: set one exit point (v2)
v2: remove exit() Cc: Ruslan Kuprieiev <kupruser@gmail.com> Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
committed by
Pavel Emelyanov
parent
bf7c171a8b
commit
3477223068
17
cr-service.c
17
cr-service.c
@@ -206,7 +206,7 @@ err:
|
|||||||
|
|
||||||
int cr_service(bool daemon_mode)
|
int cr_service(bool daemon_mode)
|
||||||
{
|
{
|
||||||
int server_fd;
|
int server_fd = -1;
|
||||||
int child_pid;
|
int child_pid;
|
||||||
|
|
||||||
struct sockaddr_un server_addr;
|
struct sockaddr_un server_addr;
|
||||||
@@ -220,7 +220,7 @@ int cr_service(bool daemon_mode)
|
|||||||
server_fd = socket(AF_LOCAL, SOCK_SEQPACKET, 0);
|
server_fd = socket(AF_LOCAL, SOCK_SEQPACKET, 0);
|
||||||
if (server_fd == -1) {
|
if (server_fd == -1) {
|
||||||
pr_perror("Can't initialize service socket.");
|
pr_perror("Can't initialize service socket.");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&server_addr, 0, sizeof(server_addr));
|
memset(&server_addr, 0, sizeof(server_addr));
|
||||||
@@ -241,7 +241,7 @@ int cr_service(bool daemon_mode)
|
|||||||
if (bind(server_fd, (struct sockaddr *) &server_addr,
|
if (bind(server_fd, (struct sockaddr *) &server_addr,
|
||||||
server_addr_len) == -1) {
|
server_addr_len) == -1) {
|
||||||
pr_perror("Can't bind.");
|
pr_perror("Can't bind.");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_info("The service socket is bound to %s\n", server_addr.sun_path);
|
pr_info("The service socket is bound to %s\n", server_addr.sun_path);
|
||||||
@@ -249,18 +249,18 @@ int cr_service(bool daemon_mode)
|
|||||||
/* change service socket permissions, so anyone can connect to it */
|
/* change service socket permissions, so anyone can connect to it */
|
||||||
if (chmod(server_addr.sun_path, 0666)) {
|
if (chmod(server_addr.sun_path, 0666)) {
|
||||||
pr_perror("Can't change permissions of the service socket.");
|
pr_perror("Can't change permissions of the service socket.");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (listen(server_fd, 16) == -1) {
|
if (listen(server_fd, 16) == -1) {
|
||||||
pr_perror("Can't listen for socket connections.");
|
pr_perror("Can't listen for socket connections.");
|
||||||
return -1;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (daemon_mode) {
|
if (daemon_mode) {
|
||||||
if (daemon(1, 1) == -1) {
|
if (daemon(1, 1) == -1) {
|
||||||
pr_perror("Can't run service server in the background");
|
pr_perror("Can't run service server in the background");
|
||||||
return -errno;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,5 +299,8 @@ int cr_service(bool daemon_mode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
err:
|
||||||
|
close_safe(&server_fd);
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user