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