Module: wine Branch: master Commit: dab64179236c7c23fc2832d56dc41b8985401595 URL: http://source.winehq.org/git/wine.git/?a=commit;h=dab64179236c7c23fc2832d56d...
Author: Piotr Caban piotr@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@Concurrency@@QEAA@J@Z @ stub -arch=win32 ??0scheduler_resource_allocation_error@Concurrency@@QAE@PBDJ@Z @ stub -arch=win64 ??0scheduler_resource_allocation_error@Concurrency@@QEAA@PEBDJ@Z -@ stub -arch=win32 ??0scoped_lock@critical_section@Concurrency@@QAE@AAV12@@Z -@ stub -arch=win64 ??0scoped_lock@critical_section@Concurrency@@QEAA@AEAV12@@Z +@ thiscall -arch=win32 ??0scoped_lock@critical_section@Concurrency@@QAE@AAV12@@Z(ptr ptr) critical_section_scoped_lock_ctor +@ cdecl -arch=win64 ??0scoped_lock@critical_section@Concurrency@@QEAA@AEAV12@@Z(ptr ptr) critical_section_scoped_lock_ctor @ stub -arch=win32 ??0scoped_lock@reader_writer_lock@Concurrency@@QAE@AAV12@@Z @ stub -arch=win64 ??0scoped_lock@reader_writer_lock@Concurrency@@QEAA@AEAV12@@Z @ stub -arch=win32 ??0scoped_lock_read@reader_writer_lock@Concurrency@@QAE@AAV12@@Z @@ -188,8 +188,8 @@ @ cdecl -arch=win64 ??1exception@std@@UEAA@XZ(ptr) MSVCRT_exception_dtor @ stub -arch=win32 ??1reader_writer_lock@Concurrency@@QAE@XZ @ stub -arch=win64 ??1reader_writer_lock@Concurrency@@QEAA@XZ -@ stub -arch=win32 ??1scoped_lock@critical_section@Concurrency@@QAE@XZ -@ stub -arch=win64 ??1scoped_lock@critical_section@Concurrency@@QEAA@XZ +@ thiscall -arch=win32 ??1scoped_lock@critical_section@Concurrency@@QAE@XZ(ptr) critical_section_scoped_lock_dtor +@ cdecl -arch=win64 ??1scoped_lock@critical_section@Concurrency@@QEAA@XZ(ptr) critical_section_scoped_lock_dtor @ stub -arch=win32 ??1scoped_lock@reader_writer_lock@Concurrency@@QAE@XZ @ stub -arch=win64 ??1scoped_lock@reader_writer_lock@Concurrency@@QEAA@XZ @ stub -arch=win32 ??1scoped_lock_read@reader_writer_lock@Concurrency@@QAE@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@Concurrency@@QAA@PBDJ@Z @ stub -arch=i386 ??0scheduler_worker_creation_error@Concurrency@@QAE@PBDJ@Z @ stub -arch=win64 ??0scheduler_worker_creation_error@Concurrency@@QEAA@PEBDJ@Z -@ stub -arch=arm ??0scoped_lock@critical_section@Concurrency@@QAA@AAV12@@Z -@ stub -arch=i386 ??0scoped_lock@critical_section@Concurrency@@QAE@AAV12@@Z -@ stub -arch=win64 ??0scoped_lock@critical_section@Concurrency@@QEAA@AEAV12@@Z +@ cdecl -arch=arm ??0scoped_lock@critical_section@Concurrency@@QAA@AAV12@@Z(ptr ptr) critical_section_scoped_lock_ctor +@ thiscall -arch=i386 ??0scoped_lock@critical_section@Concurrency@@QAE@AAV12@@Z(ptr ptr) critical_section_scoped_lock_ctor +@ cdecl -arch=win64 ??0scoped_lock@critical_section@Concurrency@@QEAA@AEAV12@@Z(ptr ptr) critical_section_scoped_lock_ctor @ stub -arch=arm ??0scoped_lock@reader_writer_lock@Concurrency@@QAA@AAV12@@Z @ stub -arch=i386 ??0scoped_lock@reader_writer_lock@Concurrency@@QAE@AAV12@@Z @ stub -arch=win64 ??0scoped_lock@reader_writer_lock@Concurrency@@QEAA@AEAV12@@Z @@ -323,9 +323,9 @@ @ stub -arch=arm ??1reader_writer_lock@Concurrency@@QAA@XZ @ stub -arch=i386 ??1reader_writer_lock@Concurrency@@QAE@XZ @ stub -arch=win64 ??1reader_writer_lock@Concurrency@@QEAA@XZ -@ stub -arch=arm ??1scoped_lock@critical_section@Concurrency@@QAA@XZ -@ stub -arch=i386 ??1scoped_lock@critical_section@Concurrency@@QAE@XZ -@ stub -arch=win64 ??1scoped_lock@critical_section@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??1scoped_lock@critical_section@Concurrency@@QAA@XZ(ptr) critical_section_scoped_lock_dtor +@ thiscall -arch=i386 ??1scoped_lock@critical_section@Concurrency@@QAE@XZ(ptr) critical_section_scoped_lock_dtor +@ cdecl -arch=win64 ??1scoped_lock@critical_section@Concurrency@@QEAA@XZ(ptr) critical_section_scoped_lock_dtor @ stub -arch=arm ??1scoped_lock@reader_writer_lock@Concurrency@@QAA@XZ @ stub -arch=i386 ??1scoped_lock@reader_writer_lock@Concurrency@@QAE@XZ @ stub -arch=win64 ??1scoped_lock@reader_writer_lock@Concurrency@@QEAA@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@critical_section@Concurrency@@QAE@AAV12@@Z */ +/* ??0scoped_lock@critical_section@Concurrency@@QEAA@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@critical_section@Concurrency@@QAE@XZ */ +/* ??1scoped_lock@critical_section@Concurrency@@QEAA@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