harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hui Ding" <wopeipei...@gmail.com>
Subject [classlib][nio]Is selector.close() blocking or not?
Date Tue, 13 Jan 2009 04:17:06 GMT
Hi Experts,
I am writing an application with NIO and Selector and found a strange
issue that if I call "Selector.close()" while a thread is being
blocked on that Selector(By calling "Selector.select()"), the call to
"close()" will block indefinitely until "Selector.select()" returns.
It's said in the Javadoc of selector.close() that: "If a thread is
currently blocked in one of this selector's selection methods then it
is interrupted as if by invoking the selector's wakeup method". So I
guess under no circumstances should Select.close() block, right?
However I came across another topic about the concurrency of Selector:
"The selection operations synchronize on the selector itself, on the
key set, and on the selected-key set, in that order.
The close method synchronizes on the selector and all three key sets
in the same order as in a selection operation." If it is true that
Selector.select() and Selector.close() both synchronize on the
selector itself, I think Selector.close() will block if other threads
are blocked on Selector.select().

Now I am confused about which one is the correct behavior of
Selector.close(), blocking or not?

BTW. I gave it a try on a Desktop PC with SUN JDK and Harmony JDK, seems
with SUN JDK, Selector.close() will never block while with Harmony
JDK, if another thread is being blocked on Selector.select(),
Selector.close will block until select() returns. Is this a bug with
Harmony JDK or not?

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message