Piotr Caban : msvcr100: Add critical_section::scoped_lock implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jun 24 14:28:33 CDT 2014


Module: wine
Branch: master
Commit: dab64179236c7c23fc2832d56dc41b8985401595
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=dab64179236c7c23fc2832d56dc41b8985401595

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Jun 24 11:57:43 2014 +0200

msvcr100: Add critical_section::scoped_lock implementation.

---

 dlls/msvcr100/msvcr100.spec |  8 ++++----
 dlls/msvcr110/msvcr110.spec | 12 ++++++------
 dlls/msvcrt/lock.c          | 27 +++++++++++++++++++++++++++
 3 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 32fee76..aee50c0 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -144,8 +144,8 @@
 @ stub -arch=win64 ??0scheduler_resource_allocation_error at Concurrency@@QEAA at J@Z
 @ stub -arch=win32 ??0scheduler_resource_allocation_error at Concurrency@@QAE at PBDJ@Z
 @ stub -arch=win64 ??0scheduler_resource_allocation_error at Concurrency@@QEAA at PEBDJ@Z
-@ stub -arch=win32 ??0scoped_lock at critical_section@Concurrency@@QAE at AAV12@@Z
-@ stub -arch=win64 ??0scoped_lock at critical_section@Concurrency@@QEAA at AEAV12@@Z
+@ thiscall -arch=win32 ??0scoped_lock at critical_section@Concurrency@@QAE at AAV12@@Z(ptr ptr) critical_section_scoped_lock_ctor
+@ cdecl -arch=win64 ??0scoped_lock at critical_section@Concurrency@@QEAA at AEAV12@@Z(ptr ptr) critical_section_scoped_lock_ctor
 @ stub -arch=win32 ??0scoped_lock at reader_writer_lock@Concurrency@@QAE at AAV12@@Z
 @ stub -arch=win64 ??0scoped_lock at reader_writer_lock@Concurrency@@QEAA at AEAV12@@Z
 @ stub -arch=win32 ??0scoped_lock_read at reader_writer_lock@Concurrency@@QAE at AAV12@@Z
@@ -188,8 +188,8 @@
 @ cdecl -arch=win64 ??1exception at std@@UEAA at XZ(ptr) MSVCRT_exception_dtor
 @ stub -arch=win32 ??1reader_writer_lock at Concurrency@@QAE at XZ
 @ stub -arch=win64 ??1reader_writer_lock at Concurrency@@QEAA at XZ
-@ stub -arch=win32 ??1scoped_lock at critical_section@Concurrency@@QAE at XZ
-@ stub -arch=win64 ??1scoped_lock at critical_section@Concurrency@@QEAA at XZ
+@ thiscall -arch=win32 ??1scoped_lock at critical_section@Concurrency@@QAE at XZ(ptr) critical_section_scoped_lock_dtor
+@ cdecl -arch=win64 ??1scoped_lock at critical_section@Concurrency@@QEAA at XZ(ptr) critical_section_scoped_lock_dtor
 @ stub -arch=win32 ??1scoped_lock at reader_writer_lock@Concurrency@@QAE at XZ
 @ stub -arch=win64 ??1scoped_lock at reader_writer_lock@Concurrency@@QEAA at XZ
 @ stub -arch=win32 ??1scoped_lock_read at reader_writer_lock@Concurrency@@QAE at XZ
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index f457285..57d7950 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -248,9 +248,9 @@
 @ stub -arch=arm ??0scheduler_worker_creation_error at Concurrency@@QAA at PBDJ@Z
 @ stub -arch=i386 ??0scheduler_worker_creation_error at Concurrency@@QAE at PBDJ@Z
 @ stub -arch=win64 ??0scheduler_worker_creation_error at Concurrency@@QEAA at PEBDJ@Z
-@ stub -arch=arm ??0scoped_lock at critical_section@Concurrency@@QAA at AAV12@@Z
-@ stub -arch=i386 ??0scoped_lock at critical_section@Concurrency@@QAE at AAV12@@Z
-@ stub -arch=win64 ??0scoped_lock at critical_section@Concurrency@@QEAA at AEAV12@@Z
+@ cdecl -arch=arm ??0scoped_lock at critical_section@Concurrency@@QAA at AAV12@@Z(ptr ptr) critical_section_scoped_lock_ctor
+@ thiscall -arch=i386 ??0scoped_lock at critical_section@Concurrency@@QAE at AAV12@@Z(ptr ptr) critical_section_scoped_lock_ctor
+@ cdecl -arch=win64 ??0scoped_lock at critical_section@Concurrency@@QEAA at AEAV12@@Z(ptr ptr) critical_section_scoped_lock_ctor
 @ stub -arch=arm ??0scoped_lock at reader_writer_lock@Concurrency@@QAA at AAV12@@Z
 @ stub -arch=i386 ??0scoped_lock at reader_writer_lock@Concurrency@@QAE at AAV12@@Z
 @ stub -arch=win64 ??0scoped_lock at reader_writer_lock@Concurrency@@QEAA at AEAV12@@Z
@@ -323,9 +323,9 @@
 @ stub -arch=arm ??1reader_writer_lock at Concurrency@@QAA at XZ
 @ stub -arch=i386 ??1reader_writer_lock at Concurrency@@QAE at XZ
 @ stub -arch=win64 ??1reader_writer_lock at Concurrency@@QEAA at XZ
-@ stub -arch=arm ??1scoped_lock at critical_section@Concurrency@@QAA at XZ
-@ stub -arch=i386 ??1scoped_lock at critical_section@Concurrency@@QAE at XZ
-@ stub -arch=win64 ??1scoped_lock at critical_section@Concurrency@@QEAA at XZ
+@ cdecl -arch=arm ??1scoped_lock at critical_section@Concurrency@@QAA at XZ(ptr) critical_section_scoped_lock_dtor
+@ thiscall -arch=i386 ??1scoped_lock at critical_section@Concurrency@@QAE at XZ(ptr) critical_section_scoped_lock_dtor
+@ cdecl -arch=win64 ??1scoped_lock at critical_section@Concurrency@@QEAA at XZ(ptr) critical_section_scoped_lock_dtor
 @ stub -arch=arm ??1scoped_lock at reader_writer_lock@Concurrency@@QAA at XZ
 @ stub -arch=i386 ??1scoped_lock at reader_writer_lock@Concurrency@@QAE at XZ
 @ stub -arch=win64 ??1scoped_lock at reader_writer_lock@Concurrency@@QEAA at XZ
diff --git a/dlls/msvcrt/lock.c b/dlls/msvcrt/lock.c
index e4ec6ce..09ff1af 100644
--- a/dlls/msvcrt/lock.c
+++ b/dlls/msvcrt/lock.c
@@ -366,4 +366,31 @@ critical_section* __thiscall critical_section_native_handle(critical_section *th
     TRACE("(%p)\n", this);
     return this;
 }
+
+typedef struct
+{
+    critical_section *cs;
+    void *unknown[3];
+} critical_section_scoped_lock;
+
+/* ??0scoped_lock at critical_section@Concurrency@@QAE at AAV12@@Z */
+/* ??0scoped_lock at critical_section@Concurrency@@QEAA at AEAV12@@Z */
+DEFINE_THISCALL_WRAPPER(critical_section_scoped_lock_ctor, 8)
+critical_section_scoped_lock* __thiscall critical_section_scoped_lock_ctor(
+        critical_section_scoped_lock *this, critical_section *cs)
+{
+    TRACE("(%p %p)\n", this, cs);
+    this->cs = cs;
+    critical_section_lock(this->cs);
+    return this;
+}
+
+/* ??1scoped_lock at critical_section@Concurrency@@QAE at XZ */
+/* ??1scoped_lock at critical_section@Concurrency@@QEAA at XZ */
+DEFINE_THISCALL_WRAPPER(critical_section_scoped_lock_dtor, 4)
+void __thiscall critical_section_scoped_lock_dtor(critical_section_scoped_lock *this)
+{
+    TRACE("(%p)\n", this);
+    critical_section_unlock(this->cs);
+}
 #endif




More information about the wine-cvs mailing list