mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-02 14:33:38 +00:00
![]() The 'busy' field in GpImage is used as an atomic variable. The C11 standard (§5.1.2.4, paragraph 25) states that two conflicting actions to a memory location shall be both atomic operations, or otherwise properly synchronized; otherwise, it constitutes a data race. However, select_frame_wic() performs a non-atomic access to the 'busy' field on a GpImage that is potentially accessible by other threads. This happens when select_frame_wic() copies new_image to the old image object. Although it does attempt to preserve the value of the 'busy' field by setting new_image->busy = image->busy first, thereby effectively assigning an identical value to the field, it is unclear that this does not actually constitute a theoretical, if not practical, data race. This also prevents replacing the busy flag with a mutex or other synchronization primitives. Therefore, skip the 'busy' field when copying fields from the new image to the original image object. |
||
---|---|---|
.. | ||
tests | ||
brush.c | ||
customlinecap.c | ||
font.c | ||
gdiplus.c | ||
gdiplus.manifest | ||
gdiplus.rc | ||
gdiplus.spec | ||
gdiplus11.manifest | ||
gdiplus_private.h | ||
graphics.c | ||
graphicspath.c | ||
image.c | ||
imageattributes.c | ||
Makefile.in | ||
matrix.c | ||
metafile.c | ||
pathiterator.c | ||
pen.c | ||
region.c | ||
stringformat.c |