HomeFreeBSD

Remove deadlock in rc caused by pwait waiting for itself.

Description

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

Details

Provenance
melifaroAuthored on Jan 21 2021, 9:26 PM
Reviewer
0mp
Differential Revision
D28240: Remove deadlock in rc caused by pwait waiting for itself
Parents
rG1ac7c34486ab: malloc_aligned: roundup allocation size up to next power of two
Branches
Unknown
Tags
Unknown