Thomas Haller 2021-05-14 10:34:33 +02:00
commit 5f939cc1cb
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
2 changed files with 26 additions and 19 deletions

View file

@ -83,6 +83,11 @@ G_DEFINE_ABSTRACT_TYPE(NMDhcpClient, nm_dhcp_client, G_TYPE_OBJECT)
/*****************************************************************************/
/* we use pid=-1 for invalid PIDs. Ensure that pid_t can hold negative values. */
G_STATIC_ASSERT(!(((pid_t) -1) > 0));
/*****************************************************************************/
pid_t
nm_dhcp_client_get_pid(NMDhcpClient *self)
{

View file

@ -169,27 +169,29 @@ stop(NMDhcpClient *client, gboolean release)
int sig, errsv;
pid = nm_dhcp_client_get_pid(client);
sig = release ? SIGALRM : SIGTERM;
_LOGD("sending %s to dhcpcd pid %d", sig == SIGALRM ? "SIGALRM" : "SIGTERM", pid);
if (pid > 1) {
sig = release ? SIGALRM : SIGTERM;
_LOGD("sending %s to dhcpcd pid %d", sig == SIGALRM ? "SIGALRM" : "SIGTERM", pid);
/* dhcpcd-9.x features privilege separation.
* It's not our job to track all these processes so we rely on dhcpcd
* to always cleanup after itself.
* Because it also re-parents itself to PID 1, the process cannot be
* reaped or waited for.
* As such, just send the correct signal.
*/
if (kill(pid, sig) == -1) {
errsv = errno;
_LOGE("failed to kill dhcpcd %d:%s", errsv, strerror(errsv));
/* dhcpcd-9.x features privilege separation.
* It's not our job to track all these processes so we rely on dhcpcd
* to always cleanup after itself.
* Because it also re-parents itself to PID 1, the process cannot be
* reaped or waited for.
* As such, just send the correct signal.
*/
if (kill(pid, sig) == -1) {
errsv = errno;
_LOGE("failed to kill dhcpcd %d:%s", errsv, strerror(errsv));
}
/* When this function exits NM expects the PID to be -1.
* This means we also need to stop watching the pid.
* If we need to know the exit status then we need to refactor NM
* to allow a non -1 to mean we're waiting to exit still.
*/
nm_dhcp_client_stop_watch_child(client, pid);
}
/* When this function exits NM expects the PID to be -1.
* This means we also need to stop watching the pid.
* If we need to know the exit status then we need to refactor NM
* to allow a non -1 to mean we're waiting to exit still.
*/
nm_dhcp_client_stop_watch_child(client, pid);
}
/*****************************************************************************/