HomeFreeBSD

Fix process exit vs reap race introduced in r329449

Description

Fix process exit vs reap race introduced in r329449

The race manifested itself mostly in terms of crashes with "spin lock
held too long".

Relevant parts of respective code paths:

exit: reap:
PROC_LOCK(p);
PROC_SLOCK(p);
p->p_state == PRS_ZOMBIE
PROC_UNLOCK(p);

				PROC_LOCK(p);

/* exit work */

				if (p->p_state == PRS_ZOMBIE) /* true */
					proc_reap()
					free proc

/* more exit work */
PROC_SUNLOCK(p);

Thus a still exiting process is reaped.

Prior to the change the zombie check was followed by slock/sunlock trip
which prevented the problem.

Even code prior to this commit has a bug: the proc is still accessed for
statistic collection purposes. However, the severity is rather small and
the bug may be fixed in a future commit.

Reported by: many
Tested by: allanjude

Details

Provenance
mjgAuthored on
Parents
rS329541: Build ofw_iicbus as a module if OPT_FDT is defined.
Branches
Unknown
Tags
Unknown