[Bug 46047] New: Multiple applications want Windows 8+ futex-like operations kernel32.dll.WaitOnAddress , kernel32.dll.WakeByAddress{All,Single} (VLC)

wine-bugs at winehq.org wine-bugs at winehq.org
Fri Oct 26 03:36:13 CDT 2018


https://bugs.winehq.org/show_bug.cgi?id=46047

            Bug ID: 46047
           Summary: Multiple applications want Windows 8+ futex-like
                    operations kernel32.dll.WaitOnAddress,
                    kernel32.dll.WakeByAddress{All,Single} (VLC)
           Product: Wine
           Version: 3.18
          Hardware: x86-64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: kernel32
          Assignee: wine-bugs at winehq.org
          Reporter: focht at gmx.net
      Distribution: ---

Hello folks,

to track:

* https://www.winehq.org/pipermail/wine-devel/2018-October/134085.html
* https://www.winehq.org/pipermail/wine-devel/2018-October/134086.html

There is a series of articles on the background/inner workings of this Windows
8+ futex-like operations by Raymond Chen on Microsoft developer blog "The Old
New Thing":

(1) https://blogs.msdn.microsoft.com/oldnewthing/20160823-00/?p=94145
("WaitOnAddress lets you create a synchronization object out of any data
variable, even a byte")

(2) https://blogs.msdn.microsoft.com/oldnewthing/20160824-00/?p=94155
("Implementing a synchronization barrier in terms of WaitOnAddress")

(3) https://blogs.msdn.microsoft.com/oldnewthing/20160825-00/?p=94165
("Implementing a critical section in terms of WaitOnAddress")

(4) https://blogs.msdn.microsoft.com/oldnewthing/20160826-00/?p=94185
("Spurious wakes, race conditions, and bogus FIFO claims: A peek behind the
curtain of WaitOnAddress")

Alternative overview to the blog using Github-based WIKI:
https://github.com/mity/mctrl/wiki/Old-New-Win32API (click the sections to get
to blog entries)

WaitOnAddress()

* WaitOnAddress lets you create a synchronization object out of any data
variable, even a byte
* Implementing a synchronization barrier in terms of WaitOnAddress
* Implementing a critical section in terms of WaitOnAddress
* Extending our critical section based on WaitOnAddress to support timeouts
* Comparing WaitOnAddress with futexes (futexi? futexen?)
* Creating a semaphore from WaitOnAddress
* Creating a semaphore with a maximum count from WaitOnAddress
* Creating a manual-reset event from WaitOnAddress
* Creating an automatic-reset event from WaitOnAddress

Related: bug 45524 ("Add a futex-based implementation of condition variables")

I found multiple applications which make use of this Windows 8+ API.
Example: VLC

https://github.com/videolan/vlc/blob/master/src/win32/thread.c

Most of them have fallback implementations if the API is not available so it's
not critical to the functionality. But it's still good to have real world tests
:-)

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list