apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lucian Adrian Grijincu" <lucian.griji...@gmail.com>
Subject Re: apr_pollset_poll return value (APR_EINTR) on solaris
Date Tue, 12 Feb 2008 20:18:45 GMT
This is the code in question.

    if (ret == -1) {
        (*num) = 0;
        if (errno == ETIME || errno == EINTR) {
            rv = APR_TIMEUP;
        }
        else {
            rv = APR_EGENERAL;
        }
    }

I don't really like the APR_EGENERAL in the else either.
Shouldn't this be something like:
if (ret == -1)
{
   (*num) = 0;
   rv = apr_get_netos_error();
}

and let apr_get_netos_error handle OS to APR errors consistent with
other architectures (select.c, poll.c)

On Feb 12, 2008 9:32 PM, Basant Kukreja <Basant.Kukreja@sun.com> wrote:
> Hi,
>    I am Basant Kukreja. I was working on apache httpd bug 42580.
> http://issues.apache.org/bugzilla/show_bug.cgi?id=42580
>
> I figured out that the cause of the problem might be in APR.
>
> apr_pollset_poll function returns APR_TIMEUP even when errno is EINTR. The
> caller functions e.g listener_thread (in worker.c) expects this API to return
> APR_EINTR if apr_pollset_poll fails.
>
> Other implementation of apr_pollset_poll (as in epoll.c) handles it correctly.
>
> Please provide your comments. Suggested patch is attached. With this patch the
> issue 42580 seems to be fixed to me.
>
> Regards,
> Basant.
>
>
> -- orghttpd-2.2.6/srclib/apr/poll/unix/port.c   Fri Apr 13 13:54:13 2007
> +++ httpd-2.2.6/srclib/apr/poll/unix/port.c Mon Feb 11 14:11:56 2008
> @@ -295,7 +295,10 @@
>
>      if (ret == -1) {
>          (*num) = 0;
> -        if (errno == ETIME || errno == EINTR) {
> +        if (errno == EINTR) {
> +            rv = APR_EINTR;
> +        }
> +        else if (errno == ETIME) {
>              rv = APR_TIMEUP;
>          }
>          else {
>
>



-- 
Lucian

Mime
View raw message