[Documentation for EnumSystemLocalesA/W](https://learn.microsoft.com/en-us/windows/win32/api/w… says "If [`LCID_ALTERNATE_SORTS`] is used with either `LCID_INSTALLED` or `LCID_SUPPORTED`, the installed or supported locales are retrieved, **as well as** the alternate sort locale identifiers." (emphasis mine).
Until now, Wine *only* returned alternate sorts in this case, which apparently breaks some versions of NexusDB.
This MR fixes the issue and adds some basic tests to ensure the issue isn't accidentally re-introduced at a later time.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6455
On Fri Sep 6 20:47:12 2024 +0000, Martin Storsjö wrote:
> FYI, this isn't universally the case - Linux trapping and emulating them
> hasn't been around since forever.
> Linux v4.11 added `HWCAP_CPUID`, and if this hwcap is enabled, the
> trapping is supported. (I'm not sure if there are kernels past 4.11 that
> don't have it set, though.) I do run wine on arm64 on a couple of old
> devboards that run Linux 4.4 kernels - although I haven't updated my
> version of Wine on them for quite a while...
> Anyway, ideally, we'd check `getauxval(AT_HWCAP) & HWCAP_CPUID` before
> going ahead and trying to read these registers - even if few users today
> really run older kernels.
Ah yep, realised this earlier but forgot to address, will Mr a fix
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6225#note_81553
Martin Storsjö (@mstorsjo) commented about dlls/ntdll/unix/system.c:
> + snprintf( path_buf, sizeof(path_buf), midr_el1_path, logical_thread_id );
> + if ((fp = fopen( path_buf, "r" )))
> + {
> + fscanf( fp, "%lx", &value );
> + fclose( fp );
> + regs[regidx++] = (struct smbios_wine_id_reg_value_arm64){ 0x4000, value };
> + }
> +
> +#define STR(a) #a
> +#define READ_ID_REG(reg_id) \
> + /* mrs x0, #reg_id */ \
> + __asm__ __volatile__( ".inst " STR(0xd5300000 | reg_id << 5) "\n\t" \
> + "mov %0, x0" : "=r"(value) :: "x0" ); \
> + regs[regidx++] = (struct smbios_wine_id_reg_value_arm64){ reg_id, value };
> +
> + /* Linux traps reads to these ID registers and emulates them. They do not vary across cores,
FYI, this isn't universally the case - Linux trapping and emulating them hasn't been around since forever.
Linux v4.11 added `HWCAP_CPUID`, and if this hwcap is enabled, the trapping is supported. (I'm not sure if there are kernels past 4.11 that don't have it set, though.) I do run wine on arm64 on a couple of old devboards that run Linux 4.4 kernels - although I haven't updated my version of Wine on them for quite a while...
Anyway, ideally, we'd check `getauxval(AT_HWCAP) & HWCAP_CPUID` before going ahead and trying to read these registers - even if few users today really run older kernels.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6225#note_81475
CLIP STUDIO PAINT spams FIXMEs for these functions when starting up.
--
v2: msvcrt: Only print FIXME once for Context_Yield().
msvcrt: Remove FIXME for _StructuredTaskCollection_dtor().
msvcrt: Print less FIXMEs for ThreadScheduler_ScheduleTask*().
https://gitlab.winehq.org/wine/wine/-/merge_requests/6454
This series is motivated by performance requirements for GetExtendedTcpTable, especially the tables that require owner PIDs. In the worst case, the existing code scans all /proc/\<pid\>/fd directories for all Wine process for every socket, and may repeat the entire scan up to 5 times if the number of connections outgrew the buffer. With esync, processes can easily have hundreds of entries in /proc/\<pid\>/fd. And, in certain environments, reading the files under /proc can be very slow; I've seen GetExtendedTcpTable take almost 2 seconds to complete.
Some applications (GOG Galaxy, Steam) use the TCP table to check that incoming connections to local services are from a set of whitelisted processes. It's possible for the GetExtendedTcpTable to take longer than the timeout on the socket, which results in failed communication between the client and service.
wineserver knows about all sockets and what process they belong to. The only missing information needed for GetExtendedTcpTable is the state of TCP sockets, which is recoverable from getsockopt(TCP_INFO).
I've added a function in server/handle.c that enumerates all handles of a given type in all processes. The new server calls use that to find all sockets and return the needed information.
Apologies for commit 3 being large. I couldn't think of a way to split it without introducing dead code.
--
v2: iphlpapi/tests: Confirm that GetExtendedUdpTable associates a socket with the correct PID.
iphlpapi/tests: Confirm that GetExtendedTcpTable associates a socket with the correct PID.
nsiproxy: Remove now unused git_pid_map and find_owning_pid.
server, nsiproxy: Implement UDP table on top of a server call.
server, nsiproxy: Implement TCP table on top of a server call.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6399
--
v3: winegstreamer: Output compressed samples from the media source.
winegstreamer: Stop on unparsed H.264 in autoplug-continue.
winegstreamer: Explicitly append an H.264 parser for H.264.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5988
Similar to !6430 and !6362, this should make it possible to use native override for these classes.
--
v3: l3codecx.ax: Register the MP3 Decoder class.
quartz: Register the MPEG Video Decoder class.
quartz: Register the MPEG Audio Decoder class.
quartz: Register the WAVE Parser class.
quartz: Register the AVI Splitter class.
quartz: Register the MPEG1 Splitter class.
quartz: Move registration code to main.c.
quartz: Simplify the filter registration code.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6441
I'm not sure this is 100% safe (maybe limiting those blits to sysmem textures
would be better like stated in the original change?)
--
v4: wined3d: Don't reject cross-device blits from CPU.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6300
Pushing all queued input immediately causes gstreamer to process all
frames in advance and queue them in the output_queue of the transform.
This results in a large amount of memory usage that can cause an OOM
issue.
This patch allows the queue to be drained at the rate required by the
application.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6432