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