Page MenuHomeFreeBSD

sockets: use only soref()/sorele() as socket reference count
ClosedPublic

Authored by glebius on Jun 30 2022, 3:12 PM.
Tags
None
Referenced Files
Unknown Object (File)
Mon, Apr 22, 7:44 AM
Unknown Object (File)
Sat, Apr 20, 5:00 AM
Unknown Object (File)
Wed, Apr 17, 9:22 AM
Unknown Object (File)
Mon, Apr 1, 1:15 PM
Unknown Object (File)
Feb 23 2024, 3:50 AM
Unknown Object (File)
Jan 31 2024, 2:19 AM
Unknown Object (File)
Jan 17 2024, 2:40 AM
Unknown Object (File)
Dec 20 2023, 2:35 AM
Subscribers

Details

Summary

o Retire SS_FDREF as it is basically a debug flag on top of already

existing soref()/sorele().

o Convert SS_PROTOREF into soref()/sorele().
o Change reference model for the listen queues, see below.
o Make sofree() private. The correct KPI to use is only sorele().
o Make soabort() respect the model and sorele() instead of sofree().

Until now the sockets on a queue had zero reference count. And the
reference were given only upon accept(2). The assumption was that there
is no way to see the queued socket from anywhere except its head. This
is not true, since queued sockets already have pcbs, which are linked at
least into the global pcb lists. With this change we put the reference
right in the sonewconn() and on accept(2) path we just hand the existing
reference to the file descriptor.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable