Alexey Varlamov wrote:
Guys,

Probably I missed that thread on InterruptibleChannel implementation,
but I've just hit on the following code in
java.nio.channels.spi.AbstractInterruptibleChannel:

static {
try {
    setInterruptAction = AccessController
    .doPrivileged(new PrivilegedExceptionAction<Method>() {
        public Method run() throws Exception {                return
Thread.class.getDeclaredMethod("setInterruptAction", new Class[] {
Runnable.class });
        }
    });
    setInterruptAction.setAccessible(true);
} catch (Exception e) {
    // FIXME: be accomodate before VM actually provides
    // setInterruptAction method
    // throw new Error(e);
}
}

There are no docs on j.l.Thread.setInterruptAction()... Does this code
snippet relate to the subject of this discussion?


Hi,

The SIGUSR2 is much more powerful than I think. If it can really break select operation without other harmful side-effect, I believe it is a good way to Interrupt Channel. IIRC, setInterruptAction is used if VM can not interrupt some I/O blocking operation, like select(), so it set a callback and ask classlib method to stop them(close fd, etc). But if SIGUSR2 works so well, I doubt it is not necessary then. BTW, can it break socket read/write or other blocking operation as well? (I'm very interested in how does it work, as common thread mechanism know nothing how to stop a certain I/O :) )

--
Alexey

2006/8/31, Paulex Yang <[EMAIL PROTECTED]>:
Geir Magnusson Jr. wrote:
> Time to take another run at this since I didn't get any responses on
> the drlvm thread.
>
> We have the problem that DRLVM uses SIGUSR2 in the thread manager (not
> an unreasonable thing to do, I believe) but this results in knocking
> threads out of select() in hysock.c (and I'm sure we'll see it in
> other places.)
>
> Now, I'm not sure what the right course of action is.  We have a
> suggested patch from Artem that suggests we just ignore when the tread
> is interrupted :
>
> --- modules/luni/src/main/native/port/linux/hysock.c
> +++ modules/luni/src/main/native/port/linux/hysock.c
> @@ -2570,11 +2570,16 @@ hysock_select (struct HyPortLibrary * po
>   I_32 rc = 0;
>   I_32 result = 0;
>
> -  result =
> +  do
> +  {
> +    result =
>     select (nfds, readfds == NULL ? NULL : &readfds->handle,
>             writefds == NULL ? NULL : &writefds->handle,
>             exceptfds == NULL ? NULL : &exceptfds->handle,
>             timeout == NULL ? NULL : &timeout->time);
> +  }
> +  while (result == -1 && errno == EINTR);
> +
>   if (result == -1)
>     {
>       rc = errno;
IIRC, months ago similar approach was discussed in another thread for
j.nio.channels.InterruptibleChannel implementation, but IMHO it can be a
workaround but is not acceptable as a solution, because
InterruptibleChannel is extensible by user application, i.e., user can
implement their own interruptible blocking I/O easily without
considering too much on thread sync issues, it's not reasonable to ask
user writing codes within a loop like this.
>
>
> this works, but I'm bothered by the fact that we're just blindly
> ignoring signals like this.  I also think that I need to go and do
> this everywhere we have a non-restarted interruptable blocking system
> call.
>
> Now, I'd like to get this fixed today, as it's high time for another
> snapshot of the JRE and HDK, but w/o it, Tomcat runs for 2 seconds at
> best :)
>
> So - does anyone have any other bright ideas?  Why don't we see this
> with J9?    Would it be better to do a per-thread signal mask after
> asking the thread manager what signal it's using du jour?  (Andrey
> noted that Sun allows one to change the signals used, apparently to
> prevent collision w/ user code vi JNI, I guess...)
>
> geir
>
>
>
>
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


--
Paulex Yang
China Software Development Lab
IBM



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--

Best Regards!

Jimmy, Jing Lv
China Software Development Lab, IBM

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to