harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mark Hindess (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-3915) [classlib][nio] java.nio.channels.Selector.select(long timeout) throws SocketException on SIGUSR2
Date Tue, 22 May 2007 10:27:16 GMT

    [ https://issues.apache.org/jira/browse/HARMONY-3915?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12497809
] 

Mark Hindess commented on HARMONY-3915:
---------------------------------------

Sergey,

The fix works for me, but fixing it in the java code means that windows also suffers the overhead
even though it is not affected by the issue.  It also means that there is a greater overhead
in the loop.  Perhaps it could be fixed in the native code?



> [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
>         Assigned To: Mark Hindess
>         Attachments: 3915.patch, 3915_test.patch
>
>
> 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