harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sergey Dmitriev (JIRA)" <j...@apache.org>
Subject [jira] Created: (HARMONY-3915) [classlib][nio] java.nio.channels.Selector.select(long timeout) throws SocketException on SIGUSR2
Date Sat, 19 May 2007 15:32:16 GMT
[classlib][nio] java.nio.channels.Selector.select(long timeout) throws SocketException on SIGUSR2
-------------------------------------------------------------------------------------------------

                 Key: HARMONY-3915
                 URL: https://issues.apache.org/jira/browse/HARMONY-3915
             Project: Harmony
          Issue Type: Bug
          Components: Classlib
         Environment: linux
            Reporter: Sergey Dmitriev


After fixing JIRA#3888 suddenly SelectorTest.test_wakeup() started to
fail. So fixed 3888 has discovered another issue with selector.
As it turned out java.nio.channels.Selector.select([long timeout])
wakes up and throws SocketException when some thread dies. Actually it
is all connected with the underlying linux function

    int  select(int  n,  fd_set  *readfds,  fd_set  *writefds,
                fd_set *exceptfds, struct timeval *timeout)

and SIGUSR2 which is used in DRLVM threading subsystem (any other
threading event which sends SIGUSR2 can cause the problem with
select()).

AFAIK some time ago we had the same problem with SIGUSR2 and this
issue has been easily resolved with SA_RESTART. Unfortunately in case
of select() it is not applicable since SA_RESTART functionality in
select() is "implementation-dependent". Quote:

       int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *errorfds, struct timeval *timeout);
       ...
       ERRORS
           Under the following conditions, select() fails and sets
           errno to:
       ...
           [EINTR]
               The select() function was interrupted before any of the
               selected events occurred and before the timeout
               interval expired. If SA_RESTART has been set for the
               interrupting signal, it is implementation-dependent
               whether select() restarts or returns with [EINTR].
      
       http://www.opengroup.org/onlinepubs/007908799/xsh/select.html


As it turned out "SUSE LINUX Enterprise Server 9" on my box does not
support SA_RESTART functionality. So I handled it with cycle. And
therefore some timeout mathematics comes into play here as well.

So I believe the code-fix and test-fix for this JIRA and code-fix for
JIRA #3888 should be committed together since all this stuff intertwined.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message