OSmesa is deprecated and has been removed from latest mesa releases, this replaces it with pbuffer rendering and flushing of the surface onto the bitmap at some specific sync points. The tests show that this is roughly how Windows seem to behave anyway, instead of rendering directly to the memory as OSmesa does.
--
v5: win32u: Remove now unnecessary context and pbuffer funcs.
win32u: Drop now unnecessary OSMesa dependency.
win32u: Use a pbuffer to implement GL on memory DCs.
opengl32: Flush the contexts on gl(Draw|Read)Pixels and glViewport.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8210
MSVC supports enum type forward declarations and doesn't complain if the
enum is only defined in a later included file, but GCC requires enums to
be defined before being used in parameters or fields.
This emits every WinRT enum definition, unlike MIDL, before any typedef,
so that the generated headers then work with GCC.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8248
This is required to fix video playback in Crashlands 2 on Proton 10.
--
v3: mfreadwrite: Fix media type output when video processor is used.
mfreadwrite/tests: Check DEFAULT_STRIDE is not always present.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8172
--
v2: msi: Fix getting version info for library loaded into wow64 process.
msi: Get system directory just once.
msi: Allocate buffer in msi_get_file_version_info().
msi/tests: Test insalling 64 bit library loaded into wow64 installer process.
version/tests: Test GetFileVersionInfoW() with wow64 FS redirection.
kernel32/tests: Test loading dll as resource or datafile with wow64 FS redirection disabled.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8254
to summarize:
* win7 (and below) don't have new form of console handles (bound ones), so test shall be skipped (skip_nt)
* test can be run in Window8 (checking that console handles in child are not closed), but without using NtCompareObject
this new MR disables the tests in Win8 which is not what the initlal intent
so this MR should be reverted, and replaced by reintroducing the logic in first version of MR!8162 to handle the absence of NtCompareObject by clearing the corresponding flag
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8271#note_106246
In kernel32/tests/loader.c, child_process will try to write to stdout after
calling LdrShutdownProcess. LdrShutdownProcess calls DLL_PROCESS_DETACH on
msvcrt, which calls msvcrt_free_io, which frees the ioinfo blocks. So to
prevent use after free in this case, we keep the ioinfos for stdin/out/err
static.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8273
IWinInetHttpInfo_QueryInfo returns a multibyte string, not a wide string. We
were also wrongly expecting it to have a NUL terminator.
* * *
this one doesn't feel good. IWinInetHttpInfo_QueryInfo calls HttpInfo_QueryInfo (urlmon), which calls HttpQueryInfoA (wininet), so it returns char*. but inside, HttpQueryInfoA is calling HttpQueryInfoW and does charset conversion. so we are converting the string to multibyte and back.
maybe there's an API that returns wchar* i don't know about.
--
v2: mshtml: Fix misuse of IWinInetHttpInfo_QueryInfo.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8228
This is not the right fix, and I need some help. Let me explain.
`session_submit_command` checks that:
1. `session->commands` is empty, and
2. `SESSION_FLAG_PENDING_COMMAND` is NOT set
before submitting the `session_op`. The assumption is, if there are queued commands, or if there is a command currently running, that pending command will submit subsequent commands when it completes.
However, in this call chain:
```
#0 0x00006fffe1d27ad7 in create_async_result (object=object@entry=0x0, callback=callback@entry=0x7e62489f1c08,
state=state@entry=0x7e61cb5322b0, out=out@entry=0x7e6242bac7a0) at ../dlls/rtworkq/queue.c:1229
#1 0x00006fffe1d222d5 in RtwqCreateAsyncResult (object=object@entry=0x0, callback=callback@entry=0x7e62489f1c08,
state=state@entry=0x7e61cb5322b0, out=out@entry=0x7e6242bac7a0) at ../dlls/rtworkq/queue.c:1245
#2 0x00006fffd45e2096 in MFPutWorkItem (queue=queue@entry=1, callback=callback@entry=0x7e62489f1c08,
state=state@entry=0x7e61cb5322b0) at ../dlls/mfplat/queue.c:46
#3 0x00006fffe41244ee in session_command_complete (session=0x7e62489f1be0) at ../dlls/mf/session.c:975
#4 0x00006fffe412d00f in session_reset (session=session@entry=0x7e62489f1be0) at ../dlls/mf/session.c:1051
#5 0x00006fffe41299fc in session_handle_source_shutdown (session=session@entry=0x7e62489f1be0)
at ../dlls/mf/session.c:2957
#6 0x00006fffe4126e90 in session_events_callback_Invoke (iface=0x7e62489f1c20, result=<optimized out>)
at ../dlls/mf/session.c:4445
```
nowhere was the `SESSION_FLAG_PENDING_COMMAND` flag set. In addition to that, `session_events_callback_Invoke` is not a command. So this could happend:
```
Thread 1 | Thread 2
call session_events_callback_Invoke |
| call session_submit_command
| <critical section>
| list_empty(&session->commands) is true, and PENDING_COMMAND not set
| MFPutWorkItem(op)
| list_add(&session->commands, op) <- (1)
| </critical_section>
call session_handle_source_shutdown |
<critical_section> |
call session_reset |
call session_command_complete |
list_head(&session->commands) |
op is returned because of (1) |
MFPutWorkItem(op) again |
</critical_section> |
```
The result is this op will be executed twice, and also double freed, because `session_commands_callback_Invoke` releases the `op`.
* * *
There is even another way an `op` can be submitted twice, `session_handle_start_error` calls `session_reset`, which already calls `session_command_complete`, and later it calls `session_command_complete_with_event` again. I think a missing return?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8270