Piotr Caban : msvcp90: Added _Lockit class implementation.
Alexandre Julliard
julliard at winehq.org
Wed Jun 22 11:48:41 CDT 2011
Module: wine
Branch: master
Commit: b8606c82ee82fbceb5b7d77f76178e69ec1642eb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b8606c82ee82fbceb5b7d77f76178e69ec1642eb
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Jun 22 14:03:54 2011 +0200
msvcp90: Added _Lockit class implementation.
---
dlls/msvcp90/misc.c | 82 +++++++++++++++++++++++++++++++++++++++++++
dlls/msvcp90/msvcp90.h | 8 ++++
dlls/msvcp90/msvcp90.spec | 28 +++++++-------
dlls/msvcp90/msvcp90_main.c | 2 +
4 files changed, 106 insertions(+), 14 deletions(-)
diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c
index 8f7a835..f0d1923 100644
--- a/dlls/msvcp90/misc.c
+++ b/dlls/msvcp90/misc.c
@@ -90,3 +90,85 @@ void CDECL mutex_mutex_dtor(mutex *m)
{
mutex_dtor(m);
}
+
+#define _LOCK_LOCALE 0
+#define _LOCK_MALLOC 1
+#define _LOCK_STREAM 2
+#define _LOCK_DEBUG 3
+#define _MAX_LOCK 4
+static CRITICAL_SECTION lockit_cs[_MAX_LOCK];
+
+/* ?_Lockit_ctor at _Lockit@std@@SAXH at Z */
+void __cdecl _Lockit_init(int locktype) {
+ InitializeCriticalSection(&lockit_cs[locktype]);
+ lockit_cs[locktype].DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": _Lockit critical section");
+}
+
+/* ?_Lockit_dtor at _Lockit@std@@SAXH at Z */
+void __cdecl _Lockit_free(int locktype)
+{
+ lockit_cs[locktype].DebugInfo->Spare[0] = (DWORD_PTR)0;
+ DeleteCriticalSection(&lockit_cs[locktype]);
+}
+
+void init_lockit(void) {
+ int i;
+
+ for(i=0; i<_MAX_LOCK; i++)
+ _Lockit_init(i);
+}
+
+void free_lockit(void) {
+ int i;
+
+ for(i=0; i<_MAX_LOCK; i++)
+ _Lockit_free(i);
+}
+
+/* ?_Lockit_ctor at _Lockit@std@@CAXPAV12 at H@Z */
+/* ?_Lockit_ctor at _Lockit@std@@CAXPEAV12 at H@Z */
+void __cdecl _Lockit__Lockit_ctor_locktype(_Lockit *lockit, int locktype)
+{
+ lockit->locktype = locktype;
+ EnterCriticalSection(&lockit_cs[locktype]);
+}
+
+/* ?_Lockit_ctor at _Lockit@std@@CAXPAV12@@Z */
+/* ?_Lockit_ctor at _Lockit@std@@CAXPEAV12@@Z */
+void __cdecl _Lockit__Lockit_ctor(_Lockit *lockit)
+{
+ _Lockit__Lockit_ctor_locktype(lockit, 0);
+}
+
+/* ??0_Lockit at std@@QAE at H@Z */
+/* ??0_Lockit at std@@QEAA at H@Z */
+DEFINE_THISCALL_WRAPPER(_Lockit_ctor_locktype, 8)
+_Lockit* __thiscall _Lockit_ctor_locktype(_Lockit *this, int locktype)
+{
+ _Lockit__Lockit_ctor_locktype(this, locktype);
+ return this;
+}
+
+/* ??0_Lockit at std@@QAE at XZ */
+/* ??0_Lockit at std@@QEAA at XZ */
+DEFINE_THISCALL_WRAPPER(_Lockit_ctor, 4)
+_Lockit* __thiscall _Lockit_ctor(_Lockit *this)
+{
+ _Lockit__Lockit_ctor_locktype(this, 0);
+ return this;
+}
+
+/* ?_Lockit_dtor at _Lockit@std@@CAXPAV12@@Z */
+/* ?_Lockit_dtor at _Lockit@std@@CAXPEAV12@@Z */
+void __cdecl _Lockit__Lockit_dtor(_Lockit *lockit)
+{
+ LeaveCriticalSection(&lockit_cs[lockit->locktype]);
+}
+
+/* ??1_Lockit at std@@QAE at XZ */
+/* ??1_Lockit at std@@QEAA at XZ */
+DEFINE_THISCALL_WRAPPER(_Lockit_dtor, 4)
+void __thiscall _Lockit_dtor(_Lockit *this)
+{
+ _Lockit__Lockit_dtor(this);
+}
diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h
index d94bc6f..9c9e337 100644
--- a/dlls/msvcp90/msvcp90.h
+++ b/dlls/msvcp90/msvcp90.h
@@ -193,3 +193,11 @@ typedef struct
{
struct locale__Locimp *ptr;
} locale;
+
+/* class _Lockit */
+typedef struct {
+ int locktype;
+} _Lockit;
+
+void init_lockit(void);
+void free_lockit(void);
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index 3dfe4d2..0da53e9 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -1078,10 +1078,10 @@
@ stub -arch=win64 ??0_Locinfo at std@@QEAA at HPEBD@Z
@ stub -arch=win32 ??0_Locinfo at std@@QAE at PBD@Z
@ stub -arch=win64 ??0_Locinfo at std@@QEAA at PEBD@Z
-@ stub -arch=win32 ??0_Lockit at std@@QAE at H@Z
-@ stub -arch=win64 ??0_Lockit at std@@QEAA at H@Z
-@ stub -arch=win32 ??0_Lockit at std@@QAE at XZ
-@ stub -arch=win64 ??0_Lockit at std@@QEAA at XZ
+@ thiscall -arch=win32 ??0_Lockit at std@@QAE at H@Z(ptr long) _Lockit_ctor_locktype
+@ cdecl -arch=win64 ??0_Lockit at std@@QEAA at H@Z(ptr long) _Lockit_ctor_locktype
+@ thiscall -arch=win32 ??0_Lockit at std@@QAE at XZ(ptr) _Lockit_ctor
+@ cdecl -arch=win64 ??0_Lockit at std@@QEAA at XZ(ptr) _Lockit_ctor
@ thiscall -arch=win32 ??0_Mutex at std@@QAE at XZ(ptr) mutex_ctor
@ cdecl -arch=win64 ??0_Mutex at std@@QEAA at XZ(ptr) mutex_ctor
@ stub -arch=win32 ??0_Timevec at std@@QAE at ABV01@@Z
@@ -1316,8 +1316,8 @@
@ cdecl -arch=win64 ??1_Locimp at locale@std@@MEAA at XZ(ptr) locale__Locimp_dtor
@ stub -arch=win32 ??1_Locinfo at std@@QAE at XZ
@ stub -arch=win64 ??1_Locinfo at std@@QEAA at XZ
-@ stub -arch=win32 ??1_Lockit at std@@QAE at XZ
-@ stub -arch=win64 ??1_Lockit at std@@QEAA at XZ
+@ thiscall -arch=win32 ??1_Lockit at std@@QAE at XZ(ptr) _Lockit_dtor
+@ cdecl -arch=win64 ??1_Lockit at std@@QEAA at XZ(ptr) _Lockit_dtor
@ thiscall -arch=win32 ??1_Mutex at std@@QAE at XZ(ptr) mutex_dtor
@ cdecl -arch=win64 ??1_Mutex at std@@QEAA at XZ(ptr) mutex_dtor
@ stub -arch=win32 ??1_Timevec at std@@QAE at XZ
@@ -2599,14 +2599,14 @@
@ stub -arch=win64 ?_Lock@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@QEAAXXZ
@ thiscall -arch=win32 ?_Lock at _Mutex@std@@QAEXXZ(ptr) mutex_lock
@ cdecl -arch=win64 ?_Lock at _Mutex@std@@QEAAXXZ(ptr) mutex_lock
-@ stub -arch=win32 ?_Lockit_ctor at _Lockit@std@@CAXPAV12@@Z
-@ stub -arch=win64 ?_Lockit_ctor at _Lockit@std@@CAXPEAV12@@Z
-@ stub -arch=win32 ?_Lockit_ctor at _Lockit@std@@CAXPAV12 at H@Z
-@ stub -arch=win64 ?_Lockit_ctor at _Lockit@std@@CAXPEAV12 at H@Z
-@ stub ?_Lockit_ctor at _Lockit@std@@SAXH at Z
-@ stub -arch=win32 ?_Lockit_dtor at _Lockit@std@@CAXPAV12@@Z
-@ stub -arch=win64 ?_Lockit_dtor at _Lockit@std@@CAXPEAV12@@Z
-@ stub ?_Lockit_dtor at _Lockit@std@@SAXH at Z
+@ cdecl -arch=win32 ?_Lockit_ctor at _Lockit@std@@CAXPAV12@@Z(ptr) _Lockit__Lockit_ctor
+@ cdecl -arch=win64 ?_Lockit_ctor at _Lockit@std@@CAXPEAV12@@Z(ptr) _Lockit__Lockit_ctor
+@ cdecl -arch=win32 ?_Lockit_ctor at _Lockit@std@@CAXPAV12 at H@Z(ptr long) _Lockit__Lockit_ctor_locktype
+@ cdecl -arch=win64 ?_Lockit_ctor at _Lockit@std@@CAXPEAV12 at H@Z(ptr long) _Lockit__Lockit_ctor_locktype
+@ cdecl ?_Lockit_ctor at _Lockit@std@@SAXH at Z(long) _Lockit_init
+@ cdecl -arch=win32 ?_Lockit_dtor at _Lockit@std@@CAXPAV12@@Z(ptr) _Lockit__Lockit_dtor
+@ cdecl -arch=win64 ?_Lockit_dtor at _Lockit@std@@CAXPEAV12@@Z(ptr) _Lockit__Lockit_dtor
+@ cdecl ?_Lockit_dtor at _Lockit@std@@SAXH at Z(long) _Lockit_free
@ stub -arch=win32 ?_MP_Add at tr1@std@@YAXQA_K_K at Z
@ stub -arch=win64 ?_MP_Add at tr1@std@@YAXQEA_K_K at Z
@ stub -arch=win32 ?_MP_Get at tr1@std@@YA_KQA_K at Z
diff --git a/dlls/msvcp90/msvcp90_main.c b/dlls/msvcp90/msvcp90_main.c
index 5dd4471..f9c508a 100644
--- a/dlls/msvcp90/msvcp90_main.c
+++ b/dlls/msvcp90/msvcp90_main.c
@@ -57,8 +57,10 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
case DLL_PROCESS_ATTACH:
init_cxx_funcs();
set_exception_vtable();
+ init_lockit();
break;
case DLL_PROCESS_DETACH:
+ free_lockit();
break;
}
More information about the wine-cvs
mailing list