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)
Thu, May 16, 1:46 PM
Unknown Object (File)
Thu, May 16, 1:45 PM
Unknown Object (File)
Thu, May 16, 1:45 PM
Unknown Object (File)
Thu, May 16, 1:33 PM
Unknown Object (File)
Sat, May 11, 12:03 AM
Unknown Object (File)
Fri, May 10, 4:55 AM
Unknown Object (File)
Fri, May 10, 4:54 AM
Unknown Object (File)
Thu, May 9, 10:06 PM
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
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 46209
Build 43098: arc lint + arc unit