From 3b9e9dd06a1c3b89c90d565e82f92eba1bea821e Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 28 Feb 2017 11:21:00 +0100 Subject: [PATCH] msvcp110: Add _Lock_shared_ptr_spin_lock implementation. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- dlls/msvcp110/msvcp110.spec | 4 ++-- dlls/msvcp120/msvcp120.spec | 4 ++-- dlls/msvcp120_app/msvcp120_app.spec | 4 ++-- dlls/msvcp140/msvcp140.spec | 4 ++-- dlls/msvcp90/misc.c | 21 +++++++++++++++++++++ 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec index b09a1d46fd3..a7c32977d3c 100644 --- a/dlls/msvcp110/msvcp110.spec +++ b/dlls/msvcp110/msvcp110.spec @@ -3815,7 +3815,7 @@ @ stub _LXp_sqrtx @ stub _LXp_subx @ extern _LZero -@ stub _Lock_shared_ptr_spin_lock +@ cdecl _Lock_shared_ptr_spin_lock() @ cdecl _Mbrtowc(ptr ptr long ptr ptr) @ stub _Mtx_clear_owner @ cdecl _Mtx_current_owns(ptr) @@ -3874,7 +3874,7 @@ @ stub _Tss_delete @ stub _Tss_get @ stub _Tss_set -@ stub _Unlock_shared_ptr_spin_lock +@ cdecl _Unlock_shared_ptr_spin_lock() @ cdecl _Wcrtomb(ptr long ptr ptr) @ cdecl _Wcscoll(ptr ptr ptr ptr ptr) @ stub _Wcsxfrm diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec index 863ead96a26..61d4b321dcf 100644 --- a/dlls/msvcp120/msvcp120.spec +++ b/dlls/msvcp120/msvcp120.spec @@ -3760,7 +3760,7 @@ @ stub _LXp_sqrtx @ stub _LXp_subx @ extern _LZero -@ stub _Lock_shared_ptr_spin_lock +@ cdecl _Lock_shared_ptr_spin_lock() @ cdecl _Mbrtowc(ptr ptr long ptr ptr) @ stub _Mtx_clear_owner @ cdecl _Mtx_current_owns(ptr) @@ -3821,7 +3821,7 @@ @ stub _Tss_delete @ stub _Tss_get @ stub _Tss_set -@ stub _Unlock_shared_ptr_spin_lock +@ cdecl _Unlock_shared_ptr_spin_lock() @ cdecl _Wcrtomb(ptr long ptr ptr) @ cdecl _Wcscoll(ptr ptr ptr ptr ptr) @ stub _Wcsxfrm diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec index 438cddb4df7..f649bbc3093 100644 --- a/dlls/msvcp120_app/msvcp120_app.spec +++ b/dlls/msvcp120_app/msvcp120_app.spec @@ -3760,7 +3760,7 @@ @ stub _LXp_sqrtx @ stub _LXp_subx @ extern _LZero msvcp120._LZero -@ stub _Lock_shared_ptr_spin_lock +@ cdecl _Lock_shared_ptr_spin_lock() msvcp120._Lock_shared_ptr_spin_lock @ cdecl _Mbrtowc(ptr ptr long ptr ptr) msvcp120._Mbrtowc @ stub _Mtx_clear_owner @ cdecl _Mtx_current_owns(ptr) msvcp120._Mtx_current_owns @@ -3821,7 +3821,7 @@ @ stub _Tss_delete @ stub _Tss_get @ stub _Tss_set -@ stub _Unlock_shared_ptr_spin_lock +@ cdecl _Unlock_shared_ptr_spin_lock() msvcp120._Unlock_shared_ptr_spin_lock @ cdecl _Wcrtomb(ptr long ptr ptr) msvcp120._Wcrtomb @ cdecl _Wcscoll(ptr ptr ptr ptr ptr) msvcp120._Wcscoll @ stub _Wcsxfrm diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec index 9a3052d51b3..ee31c7743d7 100644 --- a/dlls/msvcp140/msvcp140.spec +++ b/dlls/msvcp140/msvcp140.spec @@ -3668,7 +3668,7 @@ @ extern _LSnan _LSnan @ stub _Last_write_time @ stub _Link -@ stub _Lock_shared_ptr_spin_lock +@ cdecl _Lock_shared_ptr_spin_lock() @ stub _Lstat @ stub _Make_dir @ cdecl _Mbrtowc(ptr ptr long ptr ptr) _Mbrtowc @@ -3738,7 +3738,7 @@ @ cdecl _Towlower(long ptr) _Towlower @ cdecl _Towupper(long ptr) _Towupper @ stub _Unlink -@ stub _Unlock_shared_ptr_spin_lock +@ cdecl _Unlock_shared_ptr_spin_lock() @ stub _WStod @ stub _WStodx @ stub _WStof diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c index ce9a4e214e8..703ed9fcd25 100644 --- a/dlls/msvcp90/misc.c +++ b/dlls/msvcp90/misc.c @@ -1339,3 +1339,24 @@ void __cdecl threads__Mtx_unlock(void *mtx) { LeaveCriticalSection(mtx); } + +#if _MSVCP_VER >= 110 +static LONG shared_ptr_lock; + +void __cdecl _Lock_shared_ptr_spin_lock(void) +{ + LONG l = 0; + + while(InterlockedCompareExchange(&shared_ptr_lock, 1, 0) != 0) { + if(l++ == 1000) { + Sleep(0); + l = 0; + } + } +} + +void __cdecl _Unlock_shared_ptr_spin_lock(void) +{ + shared_ptr_lock = 0; +} +#endif