[kaffe] gnu.java.nio.VMSelector implementation
guilhem at kaffe.org
Sun Apr 3 04:10:44 PDT 2005
Thank you very much for the patch ! It looks good to me. The last two
files should also be sent to GNU Classpath though. As they are trivial
bugs I think there should not be any problem going into the CVS.
I am committing this now.
On Sun, 2005-04-03 at 17:04 +0900, Rei Odaira wrote:
> Dalibor Topic wrote:
> > Rei Odaira wrote:
> > > Hi,
> > >
> > > I'm trying to run Tomcat 5 with clustering support on Kaffe/jthread.
> > >
> > > The current implementation of gnu.java.nio.VMSelector#select()
> > > seems to directly invoke a system call "select()", instead of KSELECT().
> > > Since the system call is not aware of jthread, Kaffe can stop
> > > indefinitely when java.nio.channels.Selector#select() is called
> > > with timeout == 0 (blocking mode).
> > >
> > > Below is a simple testcase.
> > >
> > > I think the previous implementation, which uses KSELECT(), would be better,
> > > although it has several serious bugs.
> > > Any thoughts?
> > Konnichiwa Rei,
> > Thanks you very much for spotting this bug, and for the great bug
> > report! And thanks to Guilhem for checking in a fix so rapidly and
> > fixing my mistake! :)
> Thanks to Guilhem for fixing the issue!
> But unfortunately, this is not the end of the problem.
> The attached patch will fix the following five bugs
> in the selector of Kaffe/jthread.
> o The parameter "e" of jthreadedSelect() can be NULL,
> which means an infinite timeout. In that case,
> time_milli should be NOTIMEOUT.
> o We must not pass parameters "b", "c", and "d" of
> jthreadedSelect() directly to the system call select(),
> because they can be changed by select().
> o We must set maxFd, readsPending, and writesPending properly
> in jthreadedSelect().
> o helper_select() in gnu_java_nio_VMSelector.c retuns EINTR
> when the current thread is interrupted.
> However, EINTR == 4 in Linux, so we cannot distinguish
> the interrupted case from the one where the number of bits
> set in the bit masks is 4.
> o java.nio.channels.spi.AbstractSelectableChannel#register()
> should throw IllegalBlockingModeException if the channel is
> in blocking mode.
More information about the kaffe