This makes the write a proper atomic write, allowing other threads, spinning on waiting to see it updated, to see the write.
This avoids hangs in some cases, on aarch64. Signed-off-by: Martin Storsjö <[email protected]> --- With this in place, the winpthreads tests, after Kirill's patches, no longer hangs. Locally, I'm still seeing crashes in a couple pthread_cancel tests, but those crashes don't seem to show up on the github actions runners. I have a workaround for that, but I'd like to debug it more and understand it deeper before sending that for review. On the github actions runners, I'm instead seeing failures in pthread_exit/exit1.c, which I've narrowed down to what seems to be an issue in UCRT or in the host OS in that configuration - see https://developercommunity.visualstudio.com/t/Crash-when-doing-ExitThread-on-main-thre/10975751 for more information about that. So we might need to conditionally mark that one XFAIL somehow. --- mingw-w64-libraries/winpthreads/src/spinlock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mingw-w64-libraries/winpthreads/src/spinlock.c b/mingw-w64-libraries/winpthreads/src/spinlock.c index eb21509d6..f9c5944dd 100644 --- a/mingw-w64-libraries/winpthreads/src/spinlock.c +++ b/mingw-w64-libraries/winpthreads/src/spinlock.c @@ -77,6 +77,6 @@ int pthread_spin_unlock (pthread_spinlock_t *lock) { volatile spinlock_word_t *lk = (volatile spinlock_word_t *)lock; - *lk = -1; + InterlockedExchangePointer((PVOID volatile *)lk, (void*)-1); return 0; } -- 2.43.0 _______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
