Startup and lock counts in native Windows are separate, and the lock count does not decrease when an async result is freed if the platform has been started.
--
v8: rtworkq: Do not cancel pending callbacks when closing a thread pool.
rtworkq/tests: Test queue shutdown with pending items.
rtworkq/tests: Test scheduled items.
mfplat/tests: Check for async result release after canceling work and shutting down.
mfplat/tests: Release callback2 in test_event_queue().
mfplat: Free the inner cookie passed to resolver_create_cancel_object().
https://gitlab.winehq.org/wine/wine/-/merge_requests/7174
--
v5: rtworkq: Support putting work on any id in RTWQ_CALLBACK_QUEUE_PRIVATE_MASK.
rtworkq: Support putting work on RTWQ_CALLBACK_QUEUE_UNDEFINED.
rtworkq/tests: Test putting work on an undefined queue id.
mfplat/tests: Test putting work on an undefined queue id.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7173
You are right.
`while (p > *value && isspace(p) --p;` will lost a character of the value, such as `{'F', 'r', 'o', 'm', ' ', ' ', '\r', ' ', 'v', '\r', '\0'}`.
This is a test string with value_len less than 0, `{'F', 'r', 'o', 'm', ' ', ' ', '\r', ' ', '\r', '\n', '\0'}`
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7363#note_95338
Startup and lock counts in native Windows are separate, and the lock count does not decrease when an async result is freed if the platform has been started.
--
v7: rtworkq: Do not cancel pending callbacks when closing a thread pool.
rtworkq/tests: Test queue shutdown with pending items.
rtworkq/tests: Test scheduled items.
mfplat/tests: Check for async result release after canceling work and shutting down.
mfplat/tests: Release callback2 in test_event_queue().
mfplat: Free the inner cookie passed to resolver_create_cancel_object().
https://gitlab.winehq.org/wine/wine/-/merge_requests/7174
This fixes https://bugs.winehq.org/show_bug.cgi?id=52094.
For reference, here's how current_modref is being passed around (before this patch):
```mermaid
graph TB
fii["fixup_imports_ilonly<br><em style='color:#ff0'>(directly sets current_modref)</em>"]
fi["fixup_imports<br><em style='color:#ff0'>(directly sets current_modref)</em>"]
pa["process_attach<br><em style='color:#ff0'>(directly sets current_modref)</em>"]
ld[load_dll]
id["import_dll<br><em style='color:#0f0'>(directly uses current_modref)</em>"]
bin["build_import_name<br><em style='color:#0f0'>(directly uses current_modref)</em>"]
foe["find_ordinal_export<br><em style='color:#0f0'>(uses current_modref for relay)</em>"]
ffe["find_forwarded_export<br><em style='color:#0f0'>(directly uses current_modref)</em>"]
fne[find_named_export]
MI[MODULE_InitDLL]
fii --> ld
fi --> id
pa --> MI -.-> DllMain
id --> bin
id --> ld
id --> foe
id --> fne --> foe --> ffe --> foe
ffe --> fne
ffe --> bin
style DllMain color:red;
```
--
v13: ntdll: Remove superflous NULL check for importer.
ntdll: Properly track refcount on dynamic imports of export forwarders.
ntdll: Explicitly ignore dynamic (GetProcAddress) importers as relay/snoop user module.
ntdll: Properly track refcount on static imports of export forwarders.
ntdll: Register module dependency for export forwarders regardless of whether the dependency is already loaded.
ntdll: Don't re-add a module dependency if it already exists.
ntdll: Register module dependency for export forwarders only after successful resolution.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7
Succeeding tests are printed out because we use elapsed time for JUnit test reports timings. Color codes are added on Gitlab MR only. Both are currently counting toward the test output threshold and they cause some ws2_32 and ieframe test failures on Gitlab MR when the tests are still under the threshold otherwise, as the nightly tests success can attest.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7384