On Sun, 21 Jul 2002 17:54:59 -0700, Graham Nash wrote:
>I have also been seeing this scheduler error. I traced my problem down
>to the way select is handled. The select event remains in force until it
>is satisfied or the timeout expires. If during this period, one of the
>selectable file descriptors is closed, say, the select in
>pth_sched_eventmanager will fail (EBADFD) on the platform I am using.
>This has the result of looping around in pth_sched with the run queue
>empty, generating the observed failure. Your problem may be similar is
>nature. To remedy the problem, I rewrote a small amount of the user
>code. Clearly, is is possible to "fix" this in pth but there is more
>than one solution available and it is not clear which, if any, should be
>adopted.
This should be fixed in user space. The behavior when a socket is closed by
one thread while being used in another is undefined and it is impossible to
get sane results when you do this. There are *always* race conditions, and
this should *never* be done.
The problem is that another thread can never be sure that a thread is
actually in accept. It could always be about to call accept. If you close the
socket, and then another thread creates a socket, the socket descriptor you
closed may be reused. The first thread will then wind up selecting on the
wrong socket.
So you can literally never know what will happen when you do this. There is
no atomic 'accept and signal' or 'unlock and accept' operation. This will
always have undefined results.
DS
______________________________________________________________________
GNU Portable Threads (Pth) http://www.gnu.org/software/pth/
User Support Mailing List [EMAIL PROTECTED]
Automated List Manager (Majordomo) [EMAIL PROTECTED]