Artem Aliev wrote:
> Gier,
>
> I'd like to resurrect this topic.
Oh goody!
> 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().
Yes - that was something on my list. I knew that first iteration was
incomplete, but wanted to wait to see what happened. I still don't
agree that those low level calls should simply swallow the EINTR, but
let the higher levels in our 10,000 layer stack :) decide what to do.
>
> 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]
---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]