diff options
author | rmacklem <rmacklem@FreeBSD.org> | 2011-06-02 19:49:47 +0000 |
---|---|---|
committer | rmacklem <rmacklem@FreeBSD.org> | 2011-06-02 19:49:47 +0000 |
commit | e0b83a11c69f06796e47b3ee662f3d21ba3a9c7e (patch) | |
tree | 474f7037281dc7905a3486fbd03f023e24cd8f0d /contrib/llvm/lib/CodeGen/RegAllocLinearScan.cpp | |
parent | c0db2e6ab9245f3d9d32a5cc6562101f6c96b9c3 (diff) | |
download | FreeBSD-src-e0b83a11c69f06796e47b3ee662f3d21ba3a9c7e.zip FreeBSD-src-e0b83a11c69f06796e47b3ee662f3d21ba3a9c7e.tar.gz |
Fix the nfs related daemons so that they don't intermittently
fail with "bind: address already in use". This problem was reported
to the freebsd-stable@ mailing list on Feb. 19 under the subject
heading "statd/lockd startup failure" by george+freebsd at m5p dot com.
The problem is that the first combination of {udp,tcp X ipv4,ipv6}
would select a port# dynamically, but one of the other three combinations
would have that port# already in use. The patch is somewhat involved
because it was requested by dougb@ that the four combinations use the
same port# wherever possible. The patch splits the create_service()
function into two functions. The first goes as far as bind(2) in a
loop for up to GETPORT_MAXTRY - 1 times, attempting to use the same port#
for all four cases. If these attempts fail, the last attempt allows
the 4 cases to use different port #s. After this function has succeeded,
the second function, called complete_service(), does the rest of what
create_service() did.
The three daemons mountd, rpc.lockd and rpc.statd all have a
create_service() function that is patched in a similar way. However,
create_service() has non-trivial differences for the three daemons
that made it impractical to share the same functions between them.
Reviewed by: jhb
MFC after: 2 weeks
Diffstat (limited to 'contrib/llvm/lib/CodeGen/RegAllocLinearScan.cpp')
0 files changed, 0 insertions, 0 deletions