Gier, I'd like to resurrect this topic. We try to run JBoss on Harmony and meet the same problem.
Here is an except from the stack trace: java.net.SocketException: The call was cancelled at org.apache.harmony.luni.platform.OSNetworkSystem.availableStreamImpl(OSNetworkSystem.java) at org.apache.harmony.luni.platform.OSNetworkSystem.availableStream(OSNetworkSystem.java:216) at org.apache.harmony.luni.net.PlainSocketImpl.available(PlainSocketImpl.java:150) at org.apache.harmony.luni.net.SocketInputStream.available(SocketInputStream.java:50) at com.mysql.jdbc.util.ReadAheadInputStream.available(ReadAheadInputStream.java:212) at com.mysql.jdbc.MysqlIO.clearInputStream(MysqlIO.java:774) Actually, my old patch (attached) fix this problem too. So could you please take a look at the patch one more time or implement your fix for the availableStreamImpl() and other functions that call hysock_select(). Thanks Artem PS:
And one other comment on the proposed patch... it doesn't respect the timeout as it restarts the select() with the original timeout..
#> man select On Linux, the function select modifies timeout to reflect the amount of time not slept; most other implementations do not do this. This causes problems both when Linux code which reads timeout is ported to other operating systems, and when code is ported to Linux that reuses a struct timeval for multiple selects in a loop without reinitializing it. Consider timeout to be undefined after select returns. PPS: FYI: the comments and revision for previous fix. svn log modules/luni/src/main/native/luni/shared/socket.c r441311 | geirm | 2006-09-08 04:51:36 +0400 (Fri, 08 Sep 2006) | 12 lines modifications to hysock_select() to report when interrupted, and then in pollSelectRead() in socket.c for linux only to handle the interrupt return code. This passes all tests and also fixes the problem with tomcat. I'd like to continue with the other uses of hysock_select() in socket.c and elsewhere but want to commit to let others review before I go further On 9/7/06, Geir Magnusson Jr. <[EMAIL PROTECTED]> wrote:
And one other comment on the proposed patch... it doesn't respect the timeout as it restarts the select() with the original timeout... Geir Magnusson Jr. wrote: > > > Weldon Washburn wrote: >> On 9/1/06, Geir Magnusson Jr. <[EMAIL PROTECTED]> wrote: >>> >>> >>> >>> Artem Aliev wrote: >>> > The hyport and hy* are a porting layer that provides os independent >>> > interface. >>> > hysock_select() does not return EINTR on windows why it should do it >>> > under linux? >>> > either user presses Ctrl-c or ctrl-\ or VM uses other signals for its >>> > owns needs. >>> >>> I think you just gave me the answer. >>> >>> The *caller* to hysock_select() needs to decide what to do on EINTR, not >>> hysock_select() itself. >>> >>> I still don't think this is a perfect solution, but I think it's >>> better :) >> >> >> Does the above solve the problem completely or is it a temporary patch? > > I don't know, but happy to call it a temporary patch - right now we're > stuck, because we can't even run tomcat and I want to do a new snapshot. > >> Will the caller to hysock_select() need to have "#ifdef Windows.... >> #ifdef >> Linux..."? > > We already have platform specific code that calls hysock_select() > > geir > > > --------------------------------------------------------------------- > 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]
--- 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;
--------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]