And a previously created context is passed, which may later be destroyed
on its own, causing a double free.
This happens when running the ntlm tests.
--
v2: msv1_0: Avoid double free when SpInitLsaModeContext fails.
msv1_0: Avoid double free when SpAcceptLsaModeContext fails.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1955
The tests are actually racy, and the async operation is cancellable in
a very short period of time after its creation, but before it started
executing.
This will be hard to test precisely and it's not related to dinput tests
in any way. Let's remove this to fix some spurious Windows failures.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54283
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1959
OCSP support was introduced in the latest development cycle. In improves revocation check performance in general, although the caching is currently performed by CRL revocation check only. Also, even that result is not used before performing OCSP check which goes first, effectively forcing OCSP check to be always performed when a certificate has OCSP info. That leads to performance regression in some cases.
I believe once we validated revocation either way it is safe to assume the cached result valid until NextUpdate regardless of the method (that what the first patch does). Then, we can also cache the result of OCSP response the same way we do for CRL (second patch).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1940
These can be reproduced when running many of the tests, including but not only, the ole32 tests. I tried to keep the changes minimal to fix the failing tests, hopefully it should cover all the mismatches (though I'm a bit worried about the apparent dependency with combase, which has been changed to use msvcrt heap).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1956
When doing a parallel build on multi-arch tree, it sometimes
generates errors like:
/usr/lib/gcc/x86_64-w64-mingw32/12.2.1/../../../../x86_64-w64-mingw32/bin/ld: cannot find authz.dll-63db5999.spec.o: Aucun fichier ou dossier de ce type
I added a couple of traces, showing that the two winegcc invocations
for linking the DLL on the two arch:s are run in parallel *BUT*
end up with the same output file.
The one generated from tools.h / make_temp_file() called in
winegcc{build_spec_obj()}.
build_spec_obj() invokes 'winebuild -o XXX.spec.o' that starts (in -o
option handling) by unlinking XXXX.spec.o.
This opens a race condition on the output file name:
1) the XXX.spec.o is chosen by first arch in winegcc
2) XXX.spec.o is unlinked in winebuild (for first arch)
3) XXX.spec.o is chosen by second arch in winegcc
4) both winebuild invocations (first & second arch) now
write to the same file
In a nutshell, make_temp_file() isn't sufficient to ensure unicity
of filename when such filename is erased (even briefly) in the
build process.
Proposed workaround:
- use target name in generation of .spec.o filename to avoid collision.
There's might other areas which could suffer from same kind of issue.
Alternative options:
- explicitly insert getpid() or target_alias in generated name in
make_temp_file()
- change value in make_temp_file (using time(NULL) + getpid() in
parallel build can generate rather likely the same value in two
consecutive processes)
time(NULL) ^ getpid() might generate less collisions (even if
it doesn't eradicate them).
- change winebuild not to unlink output file but rather use
open(O_TRUNC) (didn't look into it)
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1927