Page MenuHomeFreeBSD

[unix(4) cleanup 4/8] Simplify unp_disconnect() callers.
ClosedPublic

Authored by markj on Sep 2 2020, 4:56 PM.
Tags
None
Referenced Files
F132532950: D26297.id77068.diff
Fri, Oct 17, 6:11 PM
Unknown Object (File)
Thu, Oct 16, 12:35 AM
Unknown Object (File)
Sun, Oct 12, 9:04 AM
Unknown Object (File)
Sat, Oct 11, 4:58 AM
Unknown Object (File)
Mon, Sep 29, 11:49 AM
Unknown Object (File)
Sat, Sep 20, 7:34 AM
Unknown Object (File)
Sep 14 2025, 12:21 AM
Unknown Object (File)
Aug 31 2025, 12:06 AM
Subscribers

Details

Summary

In all cases, PCBs are unlocked after unp_disconnect() returns. Since
unp_disconnect() may release the last PCB reference, callers may have to
bump the refcount before the call just so that they can release them
again.

Change unp_disconnect() to release PCB locks as well as connection
references. Remove code that bumps and then releases the refcount.
Tighten assertions.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

markj requested review of this revision.Sep 2 2020, 4:56 PM
markj created this revision.

Use unp_pcb_unlock_pair().

sys/kern/uipc_usrreq.c
2003 ↗(On Diff #76550)

There is a bug here, fixed later in the series: if unp_conn == NULL we might in fact be dropping the last reference here.

Don't use unp_pcb_rele_notlast() when we may in fact be releasing the last ref.

This revision was not accepted when it landed; it landed in state Needs Review.Sep 15 2020, 7:22 PM
This revision was automatically updated to reflect the committed changes.