This implements the _RunAndWait member function and the constructor of the _StructuredTaskCollection, which enables the tests for that class to run.
Also adds a throw of a missing_wait exception to the destructor when chores are scheduled and _RunAndWait was not called.
Remaining stuff after this:
- Task collection cancelling + IsCancelling function (next MR)
- Cancellation token support (requires RE'ing the _CancellationTokenState class, currently in progress)
--
v2: msvcr120: Throw exception in _StructuredTaskCollection_dtor if _RunAndWait was not called.
msvcr100: Implement missing_wait exception.
msvcr110: Implement _StructuredTaskCollection::_StructuredTaskCollection_ctor.
msvcr100: Implement exception passing from chore threads to _RunAndWait.
msvcr100: Factor out EXCEPTION_RECORD to exception_ptr conversion.
msvcr100: Move exception_ptr functions to a separate file.
msvcr100: Implement _StructuredTaskCollection::_RunAndWait.
https://gitlab.winehq.org/wine/wine/-/merge_requests/906
This extension isn't very well documented, particularly in regards to the behavior of the timeout values, so I think it makes sense to add tests since an Implementation would necessarily be done by winevulkan.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/974
This seems to be more correct than what we previously had with fewer lines of code, so I like that. I still don't really like the extra flag I had to add for Nt{Create,Open}Key, but I couldn't find a way to make things work without it. I also checked that Windows doesn't use a similar flag (by iterating over all bit masks).
--
v2: ntdll/tests: Factor out the NtEnumerateKey() tests.
kernelbase: Remove special Wow64 handling for HKEY_CLASSES_ROOT.
kernelbase: Remove special Wow6432Node handling from RegCreateKeyEx().
kernelbase: Remove special Wow6432Node handling from RegOpenKeyEx().
server: Don't return the actual 32-bit Software\Classes key.
ntdll/tests: Add some some Software\Classes query and enumerate tests.
ntdll/tests: Test that NtCreateKeyEx() also recursively obtains the Wow6432Node parent.
server: Recursively obtain the Wow6432Node parent.
ntdll/tests: Add some Software\Classes subkey tests.
https://gitlab.winehq.org/wine/wine/-/merge_requests/966
This shows that media session samples are correctly oriented, but that mfmediaengine renders them upside down.
--
v3: mfmediaengine: Remove vertical flipping of video frames.
mfmediaengine/tests: Check IMFMediaEngine_TransferVideoFrames output orientation.
mfmediaengine/tests: Pass a device and output format to create_media_engine.
mf: Avoid clearing media session command list while it is running.
mf/tests: Check sample grabber RGB / NV12 orientation.
mf/tests: Factor test grabber callback implementations.
https://gitlab.winehq.org/wine/wine/-/merge_requests/874
This sequence of patches fixes numerous corner cases in CoMsgWaitForMultipleHandles, particularly around the exact sequence in which signaled handles, windows messages, and APCs are considered and which "win" if more than one thing has happened at a time.
This was previously submitted quite some time ago, and rejected as "Needs splitting": https://www.winehq.org/pipermail/wine-devel/2020-November/177529.html
Sorry it has taken me so long to get back to this one, but here's an attempt to tease it apart into a number of smaller commits that each make smaller changes and add some of the new tests. Hopefully that makes it easier to follow which change fixes what. Apologies if the splitting is still a little tortured in places, since it re-thought all at once and then split apart, not developed in this order and then squashed. But hopefully this is more readable.
Major fixes are:
- closes a race condition with short/zero timeouts, in which it could reports RPC_S_PENDING without ever even checking the handles
- cancellation via IMessageFilter::PendingMesage -> `PENDINGMSG_CANCELCALL` now actually exits the wait
- makes sure not to pump additional messages after the handles have been signaled
- don't use a MsgWait until after seeing that handles were not already signaled. This is mostly important to COWAIT_WAITALL.
It's still not advisable to use COWAIT_WAITALL in an STA (for reasons all our favorite Microsoft Gurus have discussed: https://learn.microsoft.com/en-us/archive/blogs/larryosterman/things-you-sh…https://devblogs.microsoft.com/oldnewthing/20060127-17/?p=32493). But it gets fixed in passing as a consequence of the previous changes, and so there are some new conformance tests to show that the new behavior matches windows.
There's also a some new `todo_wine` tests for spurious calls to IMessageFilter_MessagePending. This behavior has *not* changed, but I expanded the test coverage (unsuccessfully) hoping it would give me a hint about what should change. Since I still don't know what the rules should be, I left the new tests `todo_wine`. But maybe they'll be a useful hint someday.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/969