From cef3dcbddd1fc86d5ea82017548022fbe949d633 Mon Sep 17 00:00:00 2001 From: Torge Matthies Date: Mon, 26 Sep 2022 23:04:01 +0200 Subject: [PATCH] msvcr100: Implement missing_wait exception. --- dlls/concrt140/concrt140.spec | 12 +++++----- dlls/msvcr100/msvcr100.spec | 8 +++---- dlls/msvcr110/msvcr110.spec | 12 +++++----- dlls/msvcr120/msvcr120.spec | 12 +++++----- dlls/msvcr120_app/msvcr120_app.spec | 12 +++++----- dlls/msvcrt/concurrency.c | 37 +++++++++++++++++++++++++++++ 6 files changed, 65 insertions(+), 28 deletions(-) diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec index 64da684f415..8ddf2255f31 100644 --- a/dlls/concrt140/concrt140.spec +++ b/dlls/concrt140/concrt140.spec @@ -180,12 +180,12 @@ @ stub -arch=arm ??0message_not_found@Concurrency@@QAA@XZ @ stub -arch=i386 ??0message_not_found@Concurrency@@QAE@XZ @ stub -arch=win64 ??0message_not_found@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0missing_wait@Concurrency@@QAA@PBD@Z(ptr str) missing_wait_ctor_str +@ thiscall -arch=i386 ??0missing_wait@Concurrency@@QAE@PBD@Z(ptr str) missing_wait_ctor_str +@ cdecl -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z(ptr str) missing_wait_ctor_str +@ cdecl -arch=arm ??0missing_wait@Concurrency@@QAA@XZ(ptr) missing_wait_ctor +@ thiscall -arch=i386 ??0missing_wait@Concurrency@@QAE@XZ(ptr) missing_wait_ctor +@ cdecl -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ(ptr) missing_wait_ctor @ stub -arch=arm ??0nested_scheduler_missing_detach@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0nested_scheduler_missing_detach@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0nested_scheduler_missing_detach@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 1d80726ee3a..e2107055c24 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -122,10 +122,10 @@ @ stub -arch=win64 ??0message_not_found@Concurrency@@QEAA@PEBD@Z @ stub -arch=win32 ??0message_not_found@Concurrency@@QAE@XZ @ stub -arch=win64 ??0message_not_found@Concurrency@@QEAA@XZ -@ stub -arch=win32 ??0missing_wait@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z -@ stub -arch=win32 ??0missing_wait@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ +@ thiscall -arch=win32 ??0missing_wait@Concurrency@@QAE@PBD@Z(ptr str) missing_wait_ctor_str +@ cdecl -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z(ptr str) missing_wait_ctor_str +@ thiscall -arch=win32 ??0missing_wait@Concurrency@@QAE@XZ(ptr) missing_wait_ctor +@ cdecl -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ(ptr) missing_wait_ctor @ stub -arch=win32 ??0nested_scheduler_missing_detach@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0nested_scheduler_missing_detach@Concurrency@@QEAA@PEBD@Z @ stub -arch=win32 ??0nested_scheduler_missing_detach@Concurrency@@QAE@XZ diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 7f255a9414b..4fc5a069fbb 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -209,12 +209,12 @@ @ stub -arch=arm ??0message_not_found@Concurrency@@QAA@XZ @ stub -arch=i386 ??0message_not_found@Concurrency@@QAE@XZ @ stub -arch=win64 ??0message_not_found@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0missing_wait@Concurrency@@QAA@PBD@Z(ptr str) missing_wait_ctor_str +@ thiscall -arch=i386 ??0missing_wait@Concurrency@@QAE@PBD@Z(ptr str) missing_wait_ctor_str +@ cdecl -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z(ptr str) missing_wait_ctor_str +@ cdecl -arch=arm ??0missing_wait@Concurrency@@QAA@XZ(ptr) missing_wait_ctor +@ thiscall -arch=i386 ??0missing_wait@Concurrency@@QAE@XZ(ptr) missing_wait_ctor +@ cdecl -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ(ptr) missing_wait_ctor @ stub -arch=arm ??0nested_scheduler_missing_detach@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0nested_scheduler_missing_detach@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0nested_scheduler_missing_detach@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 3c606ebf391..7b379830d4b 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -206,12 +206,12 @@ @ stub -arch=arm ??0message_not_found@Concurrency@@QAA@XZ @ stub -arch=i386 ??0message_not_found@Concurrency@@QAE@XZ @ stub -arch=win64 ??0message_not_found@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0missing_wait@Concurrency@@QAA@PBD@Z(ptr str) missing_wait_ctor_str +@ thiscall -arch=i386 ??0missing_wait@Concurrency@@QAE@PBD@Z(ptr str) missing_wait_ctor_str +@ cdecl -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z(ptr str) missing_wait_ctor_str +@ cdecl -arch=arm ??0missing_wait@Concurrency@@QAA@XZ(ptr) missing_wait_ctor +@ thiscall -arch=i386 ??0missing_wait@Concurrency@@QAE@XZ(ptr) missing_wait_ctor +@ cdecl -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ(ptr) missing_wait_ctor @ stub -arch=arm ??0nested_scheduler_missing_detach@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0nested_scheduler_missing_detach@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0nested_scheduler_missing_detach@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 2580e89c8b4..37282fc54f8 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -204,12 +204,12 @@ @ stub -arch=arm ??0message_not_found@Concurrency@@QAA@XZ @ stub -arch=i386 ??0message_not_found@Concurrency@@QAE@XZ @ stub -arch=win64 ??0message_not_found@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0missing_wait@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0missing_wait@Concurrency@@QAA@PBD@Z +@ thiscall -arch=i386 ??0missing_wait@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0missing_wait@Concurrency@@QAE@PBD@Z +@ cdecl -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0missing_wait@Concurrency@@QEAA@PEBD@Z +@ cdecl -arch=arm ??0missing_wait@Concurrency@@QAA@XZ(ptr) msvcr120.??0missing_wait@Concurrency@@QAA@XZ +@ thiscall -arch=i386 ??0missing_wait@Concurrency@@QAE@XZ(ptr) msvcr120.??0missing_wait@Concurrency@@QAE@XZ +@ cdecl -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ(ptr) msvcr120.??0missing_wait@Concurrency@@QEAA@XZ @ stub -arch=arm ??0nested_scheduler_missing_detach@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0nested_scheduler_missing_detach@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0nested_scheduler_missing_detach@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index 5a6bbec5452..6d7e9f18d63 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -361,6 +361,9 @@ extern const vtable_ptr invalid_scheduler_policy_thread_specification_vtable; typedef exception invalid_scheduler_policy_value; extern const vtable_ptr invalid_scheduler_policy_value_vtable; +typedef exception missing_wait; +extern const vtable_ptr missing_wait_vtable; + typedef struct { exception e; HRESULT hr; @@ -584,6 +587,34 @@ invalid_scheduler_policy_value * __thiscall invalid_scheduler_policy_value_copy_ return __exception_copy_ctor(_this, rhs, &invalid_scheduler_policy_value_vtable); } +/* ??0missing_wait@Concurrency@@QAA@PBD@Z */ +/* ??0missing_wait@Concurrency@@QAE@PBD@Z */ +/* ??0missing_wait@Concurrency@@QEAA@PEBD@Z */ +DEFINE_THISCALL_WRAPPER(missing_wait_ctor_str, 8) +missing_wait* __thiscall missing_wait_ctor_str( + missing_wait *this, const char *str) +{ + TRACE("(%p %p)\n", this, str); + return __exception_ctor(this, str, &missing_wait_vtable); +} + +/* ??0missing_wait@Concurrency@@QAA@XZ */ +/* ??0missing_wait@Concurrency@@QAE@XZ */ +/* ??0missing_wait@Concurrency@@QEAA@XZ */ +DEFINE_THISCALL_WRAPPER(missing_wait_ctor, 4) +missing_wait* __thiscall missing_wait_ctor(missing_wait *this) +{ + return missing_wait_ctor_str(this, NULL); +} + +DEFINE_THISCALL_WRAPPER(missing_wait_copy_ctor,8) +missing_wait * __thiscall missing_wait_copy_ctor( + missing_wait * _this, const missing_wait * rhs) +{ + TRACE("(%p %p)\n", _this, rhs); + return __exception_copy_ctor(_this, rhs, &missing_wait_vtable); +} + /* ??0scheduler_resource_allocation_error@Concurrency@@QAE@PBDJ@Z */ /* ??0scheduler_resource_allocation_error@Concurrency@@QEAA@PEBDJ@Z */ DEFINE_THISCALL_WRAPPER(scheduler_resource_allocation_error_ctor_name, 12) @@ -643,6 +674,8 @@ DEFINE_RTTI_DATA1(invalid_scheduler_policy_thread_specification, 0, &cexception_ ".?AVinvalid_scheduler_policy_thread_specification@Concurrency@@") DEFINE_RTTI_DATA1(invalid_scheduler_policy_value, 0, &cexception_rtti_base_descriptor, ".?AVinvalid_scheduler_policy_value@Concurrency@@") +DEFINE_RTTI_DATA1(missing_wait, 0, &cexception_rtti_base_descriptor, + ".?AVmissing_wait@Concurrency@@") DEFINE_RTTI_DATA1(scheduler_resource_allocation_error, 0, &cexception_rtti_base_descriptor, ".?AVscheduler_resource_allocation_error@Concurrency@@") @@ -677,6 +710,9 @@ __ASM_BLOCK_BEGIN(concurrency_exception_vtables) __ASM_VTABLE(invalid_scheduler_policy_value, VTABLE_ADD_FUNC(cexception_vector_dtor) VTABLE_ADD_FUNC(cexception_what)); + __ASM_VTABLE(missing_wait, + VTABLE_ADD_FUNC(cexception_vector_dtor) + VTABLE_ADD_FUNC(cexception_what)); __ASM_VTABLE(scheduler_resource_allocation_error, VTABLE_ADD_FUNC(cexception_vector_dtor) VTABLE_ADD_FUNC(cexception_what)); @@ -3391,6 +3427,7 @@ void msvcrt_init_concurrency(void *base) init_invalid_scheduler_policy_key_rtti(base); init_invalid_scheduler_policy_thread_specification_rtti(base); init_invalid_scheduler_policy_value_rtti(base); + init_missing_wait_rtti(base); init_scheduler_resource_allocation_error_rtti(base); init_Context_rtti(base); init_ContextBase_rtti(base);