msvcp100: Add stdext::threads::_Mtx_* implementation.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Piotr Caban 2016-10-11 15:51:23 +02:00 committed by Alexandre Julliard
parent 988cf549fc
commit a941841556
7 changed files with 99 additions and 40 deletions

View File

@ -1126,14 +1126,14 @@
@ cdecl -arch=win64 ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makewloc
@ cdecl -arch=win32 ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z(ptr long ptr ptr) locale__Locimp__Makexloc
@ cdecl -arch=win64 ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makexloc
@ stub -arch=win32 ?_Mtx_delete@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_delete@threads@stdext@@YAXPEAX@Z
@ stub -arch=win32 ?_Mtx_lock@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_lock@threads@stdext@@YAXPEAX@Z
@ stub -arch=win32 ?_Mtx_new@threads@stdext@@YAXAAPAX@Z
@ stub -arch=win64 ?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z
@ stub -arch=win32 ?_Mtx_unlock@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_unlock@threads@stdext@@YAXPEAX@Z
@ cdecl -arch=win32 ?_Mtx_delete@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_delete
@ cdecl -arch=win64 ?_Mtx_delete@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_delete
@ cdecl -arch=win32 ?_Mtx_lock@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_lock
@ cdecl -arch=win64 ?_Mtx_lock@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_lock
@ cdecl -arch=win32 ?_Mtx_new@threads@stdext@@YAXAAPAX@Z(ptr) threads__Mtx_new
@ cdecl -arch=win64 ?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z(ptr) threads__Mtx_new
@ cdecl -arch=win32 ?_Mtx_unlock@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_unlock
@ cdecl -arch=win64 ?_Mtx_unlock@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_unlock
@ cdecl -arch=win32 ?_Mutex_Lock@_Mutex@std@@CAXPAV12@@Z(ptr) mutex_mutex_lock
@ cdecl -arch=win64 ?_Mutex_Lock@_Mutex@std@@CAXPEAV12@@Z(ptr) mutex_mutex_lock
@ cdecl -arch=win32 ?_Mutex_Unlock@_Mutex@std@@CAXPAV12@@Z(ptr) mutex_mutex_unlock

View File

@ -1629,14 +1629,14 @@
@ cdecl -arch=win64 ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makewloc
@ cdecl -arch=win32 ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z(ptr long ptr ptr) locale__Locimp__Makexloc
@ cdecl -arch=win64 ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makexloc
@ stub -arch=win32 ?_Mtx_delete@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_delete@threads@stdext@@YAXPEAX@Z
@ stub -arch=win32 ?_Mtx_lock@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_lock@threads@stdext@@YAXPEAX@Z
@ stub -arch=win32 ?_Mtx_new@threads@stdext@@YAXAAPAX@Z
@ stub -arch=win64 ?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z
@ stub -arch=win32 ?_Mtx_unlock@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_unlock@threads@stdext@@YAXPEAX@Z
@ cdecl -arch=win32 ?_Mtx_delete@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_delete
@ cdecl -arch=win64 ?_Mtx_delete@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_delete
@ cdecl -arch=win32 ?_Mtx_lock@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_lock
@ cdecl -arch=win64 ?_Mtx_lock@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_lock
@ cdecl -arch=win32 ?_Mtx_new@threads@stdext@@YAXAAPAX@Z(ptr) threads__Mtx_new
@ cdecl -arch=win64 ?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z(ptr) threads__Mtx_new
@ cdecl -arch=win32 ?_Mtx_unlock@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_unlock
@ cdecl -arch=win64 ?_Mtx_unlock@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_unlock
@ cdecl -arch=win32 ?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z(ptr) locale__Locimp__New_Locimp
@ cdecl -arch=win64 ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z(ptr) locale__Locimp__New_Locimp
@ cdecl -arch=win32 ?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z(long) locale__Locimp__New_Locimp_transparent

View File

@ -1590,14 +1590,14 @@
@ cdecl -arch=win64 ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makewloc
@ cdecl -arch=win32 ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z(ptr long ptr ptr) locale__Locimp__Makexloc
@ cdecl -arch=win64 ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makexloc
@ stub -arch=win32 ?_Mtx_delete@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_delete@threads@stdext@@YAXPEAX@Z
@ stub -arch=win32 ?_Mtx_lock@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_lock@threads@stdext@@YAXPEAX@Z
@ stub -arch=win32 ?_Mtx_new@threads@stdext@@YAXAAPAX@Z
@ stub -arch=win64 ?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z
@ stub -arch=win32 ?_Mtx_unlock@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_unlock@threads@stdext@@YAXPEAX@Z
@ cdecl -arch=win32 ?_Mtx_delete@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_delete
@ cdecl -arch=win64 ?_Mtx_delete@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_delete
@ cdecl -arch=win32 ?_Mtx_lock@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_lock
@ cdecl -arch=win64 ?_Mtx_lock@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_lock
@ cdecl -arch=win32 ?_Mtx_new@threads@stdext@@YAXAAPAX@Z(ptr) threads__Mtx_new
@ cdecl -arch=win64 ?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z(ptr) threads__Mtx_new
@ cdecl -arch=win32 ?_Mtx_unlock@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_unlock
@ cdecl -arch=win64 ?_Mtx_unlock@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_unlock
@ cdecl -arch=win32 ?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z(ptr) locale__Locimp__New_Locimp
@ cdecl -arch=win64 ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z(ptr) locale__Locimp__New_Locimp
@ cdecl -arch=win32 ?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z(long) locale__Locimp__New_Locimp_transparent

View File

@ -279,6 +279,11 @@ static _Pad* (__thiscall *p__Pad_op_assign)(_Pad*, const _Pad*);
static void (__thiscall *p__Pad__Launch)(_Pad*, _Thrd_t*);
static void (__thiscall *p__Pad__Release)(_Pad*);
static void (__cdecl *p_threads__Mtx_new)(void **mtx);
static void (__cdecl *p_threads__Mtx_delete)(void *mtx);
static void (__cdecl *p_threads__Mtx_lock)(void *mtx);
static void (__cdecl *p_threads__Mtx_unlock)(void *mtx);
static BOOLEAN (WINAPI *pCreateSymbolicLinkA)(LPCSTR,LPCSTR,DWORD);
static HMODULE msvcp;
@ -388,6 +393,14 @@ static BOOL init(void)
"?_Launch@_Pad@std@@QEAAXPEAU_Thrd_imp_t@@@Z");
SET(p__Pad__Release,
"?_Release@_Pad@std@@QEAAXXZ");
SET(p_threads__Mtx_new,
"?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z");
SET(p_threads__Mtx_delete,
"?_Mtx_delete@threads@stdext@@YAXPEAX@Z");
SET(p_threads__Mtx_lock,
"?_Mtx_lock@threads@stdext@@YAXPEAX@Z");
SET(p_threads__Mtx_unlock,
"?_Mtx_unlock@threads@stdext@@YAXPEAX@Z");
} else {
SET(p_tr2_sys__File_size,
"?_File_size@sys@tr2@std@@YA_KPBD@Z");
@ -449,6 +462,14 @@ static BOOL init(void)
"?_Symlink@sys@tr2@std@@YAHPBD0@Z");
SET(p_tr2_sys__Unlink,
"?_Unlink@sys@tr2@std@@YAHPBD@Z");
SET(p_threads__Mtx_new,
"?_Mtx_new@threads@stdext@@YAXAAPAX@Z");
SET(p_threads__Mtx_delete,
"?_Mtx_delete@threads@stdext@@YAXPAX@Z");
SET(p_threads__Mtx_lock,
"?_Mtx_lock@threads@stdext@@YAXPAX@Z");
SET(p_threads__Mtx_unlock,
"?_Mtx_unlock@threads@stdext@@YAXPAX@Z");
#ifdef __i386__
SET(p_i386_Thrd_current,
"_Thrd_current");
@ -2065,6 +2086,22 @@ static void test__Pad(void)
CloseHandle(_Pad__Launch_returned);
}
static void test_threads__Mtx(void)
{
void *mtx = NULL;
p_threads__Mtx_new(&mtx);
ok(mtx != NULL, "mtx == NULL\n");
p_threads__Mtx_lock(mtx);
p_threads__Mtx_lock(mtx);
p_threads__Mtx_unlock(mtx);
p_threads__Mtx_unlock(mtx);
p_threads__Mtx_unlock(mtx);
p_threads__Mtx_delete(mtx);
}
START_TEST(msvcp120)
{
if(!init()) return;
@ -2096,6 +2133,7 @@ START_TEST(msvcp120)
test_thrd();
test_cnd();
test__Pad();
test_threads__Mtx();
test_vbtable_size_exports();

View File

@ -1590,14 +1590,14 @@
@ cdecl -arch=win64 ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) msvcp120.?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z
@ cdecl -arch=win32 ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z(ptr long ptr ptr) msvcp120.?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z
@ cdecl -arch=win64 ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) msvcp120.?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z
@ stub -arch=win32 ?_Mtx_delete@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_delete@threads@stdext@@YAXPEAX@Z
@ stub -arch=win32 ?_Mtx_lock@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_lock@threads@stdext@@YAXPEAX@Z
@ stub -arch=win32 ?_Mtx_new@threads@stdext@@YAXAAPAX@Z
@ stub -arch=win64 ?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z
@ stub -arch=win32 ?_Mtx_unlock@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_unlock@threads@stdext@@YAXPEAX@Z
@ cdecl -arch=win32 ?_Mtx_delete@threads@stdext@@YAXPAX@Z(ptr) msvcp120.?_Mtx_delete@threads@stdext@@YAXPAX@Z
@ cdecl -arch=win64 ?_Mtx_delete@threads@stdext@@YAXPEAX@Z(ptr) msvcp120.?_Mtx_delete@threads@stdext@@YAXPEAX@Z
@ cdecl -arch=win32 ?_Mtx_lock@threads@stdext@@YAXPAX@Z(ptr) msvcp120.?_Mtx_lock@threads@stdext@@YAXPAX@Z
@ cdecl -arch=win64 ?_Mtx_lock@threads@stdext@@YAXPEAX@Z(ptr) msvcp120.?_Mtx_lock@threads@stdext@@YAXPEAX@Z
@ cdecl -arch=win32 ?_Mtx_new@threads@stdext@@YAXAAPAX@Z(ptr) msvcp120.?_Mtx_new@threads@stdext@@YAXAAPAX@Z
@ cdecl -arch=win64 ?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z(ptr) msvcp120.?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z
@ cdecl -arch=win32 ?_Mtx_unlock@threads@stdext@@YAXPAX@Z(ptr) msvcp120.?_Mtx_unlock@threads@stdext@@YAXPAX@Z
@ cdecl -arch=win64 ?_Mtx_unlock@threads@stdext@@YAXPEAX@Z(ptr) msvcp120.?_Mtx_unlock@threads@stdext@@YAXPEAX@Z
@ cdecl -arch=win32 ?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z(ptr) msvcp120.?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z
@ cdecl -arch=win64 ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z(ptr) msvcp120.?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z
@ cdecl -arch=win32 ?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z(long) msvcp120.?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z

View File

@ -1509,14 +1509,14 @@
@ cdecl -arch=win64 ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makewloc
@ cdecl -arch=win32 ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z(ptr long ptr ptr) locale__Locimp__Makexloc
@ cdecl -arch=win64 ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z(ptr long ptr ptr) locale__Locimp__Makexloc
@ stub -arch=win32 ?_Mtx_delete@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_delete@threads@stdext@@YAXPEAX@Z
@ stub -arch=win32 ?_Mtx_lock@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_lock@threads@stdext@@YAXPEAX@Z
@ stub -arch=win32 ?_Mtx_new@threads@stdext@@YAXAAPAX@Z
@ stub -arch=win64 ?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z
@ stub -arch=win32 ?_Mtx_unlock@threads@stdext@@YAXPAX@Z
@ stub -arch=win64 ?_Mtx_unlock@threads@stdext@@YAXPEAX@Z
@ cdecl -arch=win32 ?_Mtx_delete@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_delete
@ cdecl -arch=win64 ?_Mtx_delete@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_delete
@ cdecl -arch=win32 ?_Mtx_lock@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_lock
@ cdecl -arch=win64 ?_Mtx_lock@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_lock
@ cdecl -arch=win32 ?_Mtx_new@threads@stdext@@YAXAAPAX@Z(ptr) threads__Mtx_new
@ cdecl -arch=win64 ?_Mtx_new@threads@stdext@@YAXAEAPEAX@Z(ptr) threads__Mtx_new
@ cdecl -arch=win32 ?_Mtx_unlock@threads@stdext@@YAXPAX@Z(ptr) threads__Mtx_unlock
@ cdecl -arch=win64 ?_Mtx_unlock@threads@stdext@@YAXPEAX@Z(ptr) threads__Mtx_unlock
@ cdecl -arch=win32 ?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z(ptr) locale__Locimp__New_Locimp
@ cdecl -arch=win32 ?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z(long) locale__Locimp__New_Locimp_transparent
@ cdecl -arch=win64 ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z(ptr) locale__Locimp__New_Locimp

View File

@ -1318,3 +1318,24 @@ LONGLONG __cdecl _Query_perf_frequency(void)
return li.QuadPart;
}
#endif
void __cdecl threads__Mtx_new(void **mtx)
{
*mtx = MSVCRT_operator_new(sizeof(CRITICAL_SECTION));
InitializeCriticalSection(*mtx);
}
void __cdecl threads__Mtx_delete(void *mtx)
{
DeleteCriticalSection(mtx);
}
void __cdecl threads__Mtx_lock(void *mtx)
{
EnterCriticalSection(mtx);
}
void __cdecl threads__Mtx_unlock(void *mtx)
{
LeaveCriticalSection(mtx);
}