]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Remove deadlock in rc caused by pwait waiting for itself.
authorAlexander V. Chernikov <melifaro@FreeBSD.org>
Thu, 21 Jan 2021 21:26:15 +0000 (21:26 +0000)
committerAlexander V. Chernikov <melifaro@FreeBSD.org>
Thu, 21 Jan 2021 21:36:37 +0000 (21:36 +0000)
commit5bdce6ff546e00673f9f515d2165d02901e858aa
tree2a3b853afcfe7cee2d80be5e23649f0563c76caa
parent1ac7c34486ab9177c2472278739568d4607e1acc
Remove deadlock in rc caused by pwait waiting for itself.

The following situation can trigger the deadlock:
1) Long time ago a_service was started through rc.d
2) We want to restart a_service and issue service a_service restart
3) rc.subr reads current process PID (via file or process),
   sends TERM signal and runs pwait with PID harvested
4) a_service process dies very quickly so it's PID becomes available.
   It is possible that while original process was running,
   PID counter overflowed and pwait got assigned a_service's PID.

This patch ignores pid(s) to wait that are equal to pwait PID.

Reported by: Dan McGregor, Boris Lytochkin
Submitted by: Boris Lytochkin <lytboris at gmail.com>
Reviewed By: 0mp
MFC after: 2 weeks
PR: 218598
Differential Revision: https://reviews.freebsd.org/D28240
bin/pwait/pwait.1
bin/pwait/pwait.c