Page MenuHomeFreeBSD

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

Authored by glebius on Jun 30 2022, 3:12 PM.

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
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.