harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tim Ellison <t.p.elli...@gmail.com>
Subject Re: [M9] Last blocker
Date Wed, 01 Apr 2009 21:47:08 GMT
I see that we have a function "pollSelectRead" in
OSNetworkSystemLinux.c:575 that looks like it is doing the right sort of
thing already.

I hope to have some time tomorrow to look at this again.

Regards,
Tim

Regis wrote:
> Tim Ellison wrote:
>> Regis wrote:
>>> after applying patch [1] I could pass HttpsURLConnectionTest. I'm not
>>> sure whether it's the best way to resolve this, and I think we need to
>>> find out a way that classlib can work with both drlvm and IBM vme
>>> painless.
>>
>> Yes, I assume that the refactored socket code opened up a timing window
>> in this test case that was always there, since I don't recall that we
>> did this retry in M8 and earlier?
>>
>>> I'm familiar with signals handling, is it possible to define
> 
> Sorry here should be *not* familiar....
> 
>>> some macros to deal with the signals and retry system calls, and we can
>>> add build options to select turn it on or off?
>>>
>>> [1]
>>>
>>> Index: modules/luni/src/main/native/luni/unix/OSNetworkSystemLinux.c
>>> =====================================================================
>>> --- modules/luni/src/main/native/luni/unix/OSNetworkSystemLinux.c
>>> +++ modules/luni/src/main/native/luni/unix/OSNetworkSystemLinux.c
>>> @@ -71,15 +71,20 @@ selectRead
>>>    my_pollfd.fd = hysocketP->sock;
>>>    my_pollfd.events = POLLIN | POLLPRI;
>>>    my_pollfd.revents = 0;
>>> -  result = poll (&my_pollfd, 1, timeout);
>>> -
>>> -  if (result == 0)
>>> -    return HYPORT_ERROR_SOCKET_TIMEOUT;
>>>
>>> -  if (result == -1)
>>> -    return HYPORT_ERROR_SOCKET_OPFAILED;
>>> +  while (1) {
>>> +    result = poll (&my_pollfd, 1, timeout);
>>> +    if (result == 0)
>>> +      return HYPORT_ERROR_SOCKET_TIMEOUT;
>>>
>>> -  return result;
>>> +    if (result == -1 && errno == EINTR) {
>>
>> Hmm, so how do we know that the EINTR was caused by the SIGUSR2 signal?
>>  Isn't this too broad a condition in which to 'continue'?
>>
>> ...and when we do continue we will wait for the full timeout period
>> again.  That doesn't seem right either.
>>
>>
>> It may be a pragmatic fix to get us through to M9, but it looks like an
>> area that requires a more thorough consideration.
> 
> Yes, the patch need to be refined, I'm still learning how to write
> signal handler :)
> 
>>
>> Regards,
>> Tim
>>
>>> +      continue;
>>> +    }
>>> +    if (result == -1)
>>> +      return HYPORT_ERROR_SOCKET_OPFAILED;
>>> +
>>> +    return result;
>>> +  }
>>>  }
>>>
>>>
>>
> 
> 

Mime
View raw message