thread safety of fhandler_base_overlapped

Ken Brown kbrown@cornell.edu
Mon Dec 20 23:48:42 GMT 2021


On 12/20/2021 6:02 PM, David McFarland wrote:
> I'm seeing a problem where occasionally write() returns EAGAIN on a
> blocking pipe. I believe this happens when multiple threads are writing
> concurrently to the pipe, and the overlapped structure is modified by
> one thread while another one is between calls to WFMO and
> GetOverlappedResult.
> 
> I found this change:
> 
> =====
> commit 2a4b1de773e6159ea8197b6fc3f7e4845479b476
> Author: Corinna Vinschen <corinna@vinschen.de>
> Date:   Mon Mar 23 21:06:00 2020 +0100
> 
>      Cygwin: serial: use per call OVERLAPPED structs
> 
>      Sharing the OVERLAPPED struct and event object in there between
>      read and select calls in the fhandler might have been a nice
>      optimization way back when, but it is a dangerous, not thread-safe
>      approach.  Fix this by creating per-fhandler, per-call OVERLAPPED
>      structs and event objects on demand.
> 
>      Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
> =====
> 
> which seems to fix a similar problem in fhandler_serial.
> 
> Is is possible that this needs to be done for fhandler_base_overlapped
> as well? I'll try using per-call buffers to see if it fixes my problem.

fhandler_base_overlapped was removed in commit f002d02b17.  Are you looking at 
an old version of the sources?

Ken


More information about the Cygwin-developers mailing list