apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arsen Chaloyan <achalo...@yahoo.com>
Subject Re: Interruptable pollset
Date Mon, 16 Feb 2009 09:13:21 GMT
Well, below is final at this time not so trivial issue still concerning Windows implementation
only.

Description:
Interruptable pollset creation sporadically fails.

How to reproduce:
Call apr_pollset_create() in a loop, say 100 times, you will see that some of the attempts
fail.

How to fix:
See static apr_status_t create_socket_pipe(SOCKET *rd, SOCKET *wr) in file_io/win32/pipe.c


The following assumption is not always true
        /* Listening socket is nonblocking by now.
         * The accept must create the socket
         * immediatelly because we connected already.
         */

I would say: The accept should create the socket, but still may fail.

As far as listening socket is nonblocking, reasonable number of attempts of accept() call
should be considered. Alternatively listening socket can be switched to blocking mode before
accept() call.


I still use 1.2 and 1.3 versions, and have interruptable pollset functionality implemented
on top of apr_pollset.
http://code.google.com/p/unimrcp/source/browse/trunk/libs/apr-toolkit/src/apt_pollset.c
It works just fine on my side, just wanted to contribute back to the APR project.

Thanks,
Arsen.
www.unimrcp.org



________________________________
From: Mladen Turk <mturk@apache.org>
To: Arsen Chaloyan <achaloyan@yahoo.com>
Cc: dev@apr.apache.org
Sent: Thursday, February 12, 2009 9:10:54 PM
Subject: Re: Interruptable pollset

Arsen Chaloyan wrote:
> Well and thanks, Mladen.
> 
> Below is the next issue you should want to fix: apr_pollset_destroy() crashes if pollset
was created with enabled APR_POLLSET_WAKEABLE.
> The reason is wakeup_pipe_cleanup() should consider !APR_FILES_AS_SOCKETS case. This
is still easy to fix and please find the patch below.
> 

I added the apr_file_socket_pipe_close internal function.
It's inside 1.4.x branch together with previous patch.

For trunk I plan to use the same code but it'll go
together with the new pollset provider api.

Regards
-- ^(TM)

Mime
View raw message