userwork: port to pidref_set_parent()
This commit is contained in:
+12
-8
@@ -461,6 +461,7 @@ static int process_connection(VarlinkServer *server, int fd) {
|
||||
static int run(int argc, char *argv[]) {
|
||||
usec_t start_time, listen_idle_usec, last_busy_usec = USEC_INFINITY;
|
||||
_cleanup_(varlink_server_unrefp) VarlinkServer *server = NULL;
|
||||
_cleanup_(pidref_done) PidRef parent = PIDREF_NULL;
|
||||
unsigned n_iterations = 0;
|
||||
int m, listen_fd, r;
|
||||
|
||||
@@ -505,6 +506,12 @@ static int run(int argc, char *argv[]) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to disable userdb NSS compatibility: %m");
|
||||
|
||||
r = pidref_set_parent(&parent);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to acquire pidfd of parent process: %m");
|
||||
if (parent.pid == 1) /* We got reparented away from userdbd? */
|
||||
return log_error_errno(SYNTHETIC_ERRNO(ESRCH), "Parent already died, exiting.");
|
||||
|
||||
start_time = now(CLOCK_MONOTONIC);
|
||||
|
||||
for (;;) {
|
||||
@@ -554,14 +561,11 @@ static int run(int argc, char *argv[]) {
|
||||
return log_error_errno(r, "Failed to test for POLLIN on listening socket: %m");
|
||||
|
||||
if (FLAGS_SET(r, POLLIN)) {
|
||||
pid_t parent;
|
||||
|
||||
parent = getppid();
|
||||
if (parent <= 1)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(ESRCH), "Parent already died?");
|
||||
|
||||
if (kill(parent, SIGUSR2) < 0)
|
||||
return log_error_errno(errno, "Failed to kill our own parent: %m");
|
||||
r = pidref_kill(&parent, SIGUSR2);
|
||||
if (r == -ESRCH)
|
||||
return log_error_errno(r, "Parent already died?");
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to send SIGUSR2 signal to parent: %m");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user