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 10:03:23 GMT
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
> 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.

Regards,
Tim

> +      continue;
> +    }
> +    if (result == -1)
> +      return HYPORT_ERROR_SOCKET_OPFAILED;
> +
> +    return result;
> +  }
>  }
> 
> 

Mime
View raw message