Date: Wed, 3 Jun 1998 05:00:01 -0700 (PDT) From: David Greenman <dg@root.com> To: freebsd-bugs@FreeBSD.ORG Subject: Re: kern/6837: in_setpeeraddr() and in_setsockaddr() block on memory Message-ID: <199806031200.FAA21557@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/6837; it has been noted by GNATS. From: David Greenman <dg@root.com> To: Craig Metz <cmetz@inner.net> Cc: freebsd-gnats-submit@FreeBSD.ORG Subject: Re: kern/6837: in_setpeeraddr() and in_setsockaddr() block on memory Date: Wed, 03 Jun 1998 04:59:40 -0700 > If you do it M_WAIT style, the kernel tsleep()s the process, and the app >doesn't have any choice. It sleeps, possibly for a long time. By the time it >wakes up, given many typical places where getpeername()/getsockname() are used, >the returned value will be irrelevant. In many cases the delay won't be for more than a few microseconds while the pagedaemon wakes up and frees some cruft. In the worst case, some pages need to be pushed to swap, but even that should be less than a second of wait, so I don't see your argument about client retries. I really don't think it is a good idea to make this non-blocking. > The other, far easier to explain answer, is that we're putting some code in >there for IPv6 support that makes the malloc() happen at splnet(), and >tsleep()ing at such a priority is not good. That would be bad, but I don't think the solution is to make it fail on temporary resource shortages. I think a better solution would be to change the functions to take an already (m)alloced struct sockaddr_in and change the callers (I think there are only two) to accomodate. -DG David Greenman Co-founder/Principal Architect, The FreeBSD Project To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199806031200.FAA21557>