Skip site navigation (1)Skip section navigation (2)
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>