Date: Thu, 08 Apr 1999 15:41:51 -0700 From: David Greenman <dg@root.com> To: Tony Finch <dot@dotat.at> Cc: Marc Slemko <marcs@znep.com>, smp@FreeBSD.ORG Subject: Re: concurrent select()s on listen socket broken under SMP Message-ID: <199904082241.PAA21435@implode.root.com> In-Reply-To: Your message of "Thu, 08 Apr 1999 21:48:38 BST." <14093.5670.813002.917842@chiark.greenend.org.uk>
next in thread | previous in thread | raw e-mail | index | archive | help
>Marc Slemko writes: >> >> There is a race condition in the idea that having multiple processes doing >> a select() then an accept() on the same descriptor should always result in >> an accept() for each success from accept(). It is not an OS problem, >> although various OSes may behave in different ways. >> >> This is one of the reasons why Apache uses an "accept mutex". It >> essentially does the same thing if you have multiple listening sockets. > >Ah, I have heard of this before then, although I didn't think it would >have this kind of effect. I had a quick dig around the kernel code to >see if there were any likely changes that I could make. What breaks if >I change the wakeup((caddr_t)&sb->sb_cc); in sowakeup() (line 319 of >uipc_socket2.c) to a wakeup_one()? In addition to the other comments that have already been made, I would like to also point out that wakeup_one() wakes "at least one process", not "at most one process". It can and will wakeup more than one process depending on process states. -DG David Greenman Co-founder/Principal Architect, The FreeBSD Project - http://www.freebsd.org Creator of high-performance Internet servers - http://www.terasolutions.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-smp" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199904082241.PAA21435>