mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-18 08:20:34 +01:00
dhcpcd: merge branch 'th/dhcpcd-kill-em-all'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/726 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/856
This commit is contained in:
commit
5f939cc1cb
2 changed files with 26 additions and 19 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue