Date: Sat, 12 Dec 1998 17:58:42 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: Don Lewis <Don.Lewis@tsc.tdk.com> Cc: Peter Edwards <peter.edwards@isocor.ie>, Archie Cobbs <archie@whistle.com>, freebsd-current@FreeBSD.ORG Subject: Re: inetd: realloc/free bug Message-ID: <199812130158.RAA14315@apollo.backplane.com> References: <199812130138.RAA22963@salsa.gv.tsc.tdk.com>
next in thread | previous in thread | raw e-mail | index | archive | help
:It also has the downside of keeping inetd "active", so it can't :be totally swapped out if it's not in use. This might be a bit :of a concern to some folks, like those who run FreeBSD on their :laptops. Your implementation is also more syscall intensive than :some of the alternatives. We may be able to remove the timeout from the select(), but someone else is going to have to go through the code (as I indicated earlier) to determine that this is the case before removing the timeout. :Your patch also doesn't eliminate all the race conditions. When :a signal handler is invoked, it blocks reception of the signal that :triggered it, but not the reception of other signals, so it is possible Sure it does. Look at the code. Line 410 or so of inetd.c :Oh yeah, there is another race condition that I've never seen mentioned. :In the case of TCP services where we do something like : ctrl = accept(...); : pid = fork(); : if (pid == 0) { : fiddle with fds : exec(...); : } : close(ctrl); :there is a problem if the child process runs, writes a bunch of data :to the socket and exits before the parent process executes the close(). :If this happens, the close() in the parent can hang for an indefinite :period of time, until the client consumes the buffered data on the socket. :I fixed this in BIND 4.x a few years ago using a pipe to synchronize I'm not sure I follow. close() on a socket descriptor does not block. -Matt Matthew Dillon Engineering, HiWay Technologies, Inc. & BEST Internet Communications & God knows what else. <dillon@backplane.com> (Please include original email in any response) To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199812130158.RAA14315>