[PATCH 5/5] msvcr100: Implement invalid_multiple_scheduling exception.

Torge Matthies tmatthies at codeweavers.com
Tue Jul 12 15:49:25 CDT 2022


Signed-off-by: Torge Matthies <tmatthies at codeweavers.com>
---
 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           | 40 +++++++++++++++++++++++++++++
 6 files changed, 68 insertions(+), 28 deletions(-)

diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec
index 9370566bb2c..64da684f415 100644
--- a/dlls/concrt140/concrt140.spec
+++ b/dlls/concrt140/concrt140.spec
@@ -144,12 +144,12 @@
 @ stub -arch=arm ??0invalid_link_target at Concurrency@@QAA at XZ
 @ stub -arch=i386 ??0invalid_link_target at Concurrency@@QAE at XZ
 @ stub -arch=win64 ??0invalid_link_target at Concurrency@@QEAA at XZ
-@ stub -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at PBD@Z
-@ stub -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z
-@ stub -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z
-@ stub -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at XZ
-@ stub -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ
-@ stub -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ
+@ cdecl -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ thiscall -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ cdecl -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ cdecl -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at XZ(ptr) invalid_multiple_scheduling_ctor
+@ thiscall -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ(ptr) invalid_multiple_scheduling_ctor
+@ cdecl -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ(ptr) invalid_multiple_scheduling_ctor
 @ stub -arch=arm ??0invalid_oversubscribe_operation at Concurrency@@QAA at PBD@Z
 @ stub -arch=i386 ??0invalid_oversubscribe_operation at Concurrency@@QAE at PBD@Z
 @ stub -arch=win64 ??0invalid_oversubscribe_operation at Concurrency@@QEAA at PEBD@Z
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 0d38005c13a..c0bbbc5b86d 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -94,10 +94,10 @@
 @ stub -arch=win64 ??0invalid_link_target at Concurrency@@QEAA at PEBD@Z
 @ stub -arch=win32 ??0invalid_link_target at Concurrency@@QAE at XZ
 @ stub -arch=win64 ??0invalid_link_target at Concurrency@@QEAA at XZ
-@ stub -arch=win32 ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z
-@ stub -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z
-@ stub -arch=win32 ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ
-@ stub -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ
+@ thiscall -arch=win32 ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ cdecl -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ thiscall -arch=win32 ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ(ptr) invalid_multiple_scheduling_ctor
+@ cdecl -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ(ptr) invalid_multiple_scheduling_ctor
 @ stub -arch=win32 ??0invalid_operation at Concurrency@@QAE at PBD@Z
 @ stub -arch=win64 ??0invalid_operation at Concurrency@@QEAA at PEBD@Z
 @ stub -arch=win32 ??0invalid_operation at Concurrency@@QAE at XZ
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index b867cbf69fb..740b7d69920 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -167,12 +167,12 @@
 @ stub -arch=arm ??0invalid_link_target at Concurrency@@QAA at XZ
 @ stub -arch=i386 ??0invalid_link_target at Concurrency@@QAE at XZ
 @ stub -arch=win64 ??0invalid_link_target at Concurrency@@QEAA at XZ
-@ stub -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at PBD@Z
-@ stub -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z
-@ stub -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z
-@ stub -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at XZ
-@ stub -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ
-@ stub -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ
+@ cdecl -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ thiscall -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ cdecl -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ cdecl -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at XZ(ptr) invalid_multiple_scheduling_ctor
+@ thiscall -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ(ptr) invalid_multiple_scheduling_ctor
+@ cdecl -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ(ptr) invalid_multiple_scheduling_ctor
 @ stub -arch=arm ??0invalid_operation at Concurrency@@QAA at PBD@Z
 @ stub -arch=i386 ??0invalid_operation at Concurrency@@QAE at PBD@Z
 @ stub -arch=win64 ??0invalid_operation at Concurrency@@QEAA at PEBD@Z
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index e39b2e76aa1..2bdf71fbe0d 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -164,12 +164,12 @@
 @ stub -arch=arm ??0invalid_link_target at Concurrency@@QAA at XZ
 @ stub -arch=i386 ??0invalid_link_target at Concurrency@@QAE at XZ
 @ stub -arch=win64 ??0invalid_link_target at Concurrency@@QEAA at XZ
-@ stub -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at PBD@Z
-@ stub -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z
-@ stub -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z
-@ stub -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at XZ
-@ stub -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ
-@ stub -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ
+@ cdecl -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ thiscall -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ cdecl -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str
+@ cdecl -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at XZ(ptr) invalid_multiple_scheduling_ctor
+@ thiscall -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ(ptr) invalid_multiple_scheduling_ctor
+@ cdecl -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ(ptr) invalid_multiple_scheduling_ctor
 @ stub -arch=arm ??0invalid_operation at Concurrency@@QAA at PBD@Z
 @ stub -arch=i386 ??0invalid_operation at Concurrency@@QAE at PBD@Z
 @ stub -arch=win64 ??0invalid_operation at Concurrency@@QEAA at PEBD@Z
diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec
index 89165b204f9..47ac265ea18 100644
--- a/dlls/msvcr120_app/msvcr120_app.spec
+++ b/dlls/msvcr120_app/msvcr120_app.spec
@@ -162,12 +162,12 @@
 @ stub -arch=arm ??0invalid_link_target at Concurrency@@QAA at XZ
 @ stub -arch=i386 ??0invalid_link_target at Concurrency@@QAE at XZ
 @ stub -arch=win64 ??0invalid_link_target at Concurrency@@QEAA at XZ
-@ stub -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at PBD@Z
-@ stub -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z
-@ stub -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z
-@ stub -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at XZ
-@ stub -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ
-@ stub -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ
+@ cdecl -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at PBD@Z(ptr ptr) msvcr120.??0invalid_multiple_scheduling at Concurrency@@QAA at PBD@Z
+@ thiscall -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z(ptr ptr) msvcr120.??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z
+@ cdecl -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z(ptr ptr) msvcr120.??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z
+@ cdecl -arch=arm ??0invalid_multiple_scheduling at Concurrency@@QAA at XZ(ptr) msvcr120.??0invalid_multiple_scheduling at Concurrency@@QAA at XZ
+@ thiscall -arch=i386 ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ(ptr) msvcr120.??0invalid_multiple_scheduling at Concurrency@@QAE at XZ
+@ cdecl -arch=win64 ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ(ptr) msvcr120.??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ
 @ stub -arch=arm ??0invalid_operation at Concurrency@@QAA at PBD@Z
 @ stub -arch=i386 ??0invalid_operation at Concurrency@@QAE at PBD@Z
 @ stub -arch=win64 ??0invalid_operation at Concurrency@@QEAA at PEBD@Z
diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c
index 473f978bd61..f2e40e633a3 100644
--- a/dlls/msvcrt/concurrency.c
+++ b/dlls/msvcrt/concurrency.c
@@ -333,6 +333,9 @@ extern const vtable_ptr improper_scheduler_attach_vtable;
 typedef exception improper_scheduler_detach;
 extern const vtable_ptr improper_scheduler_detach_vtable;
 
+typedef exception invalid_multiple_scheduling;
+extern const vtable_ptr invalid_multiple_scheduling_vtable;
+
 typedef exception invalid_scheduler_policy_key;
 extern const vtable_ptr invalid_scheduler_policy_key_vtable;
 
@@ -455,6 +458,35 @@ improper_scheduler_detach * __thiscall improper_scheduler_detach_copy_ctor(
     return __exception_copy_ctor(_this, rhs, &improper_scheduler_detach_vtable);
 }
 
+/* ??0invalid_multiple_scheduling at Concurrency@@QAA at PBD@Z */
+/* ??0invalid_multiple_scheduling at Concurrency@@QAE at PBD@Z */
+/* ??0invalid_multiple_scheduling at Concurrency@@QEAA at PEBD@Z */
+DEFINE_THISCALL_WRAPPER(invalid_multiple_scheduling_ctor_str, 8)
+invalid_multiple_scheduling* __thiscall invalid_multiple_scheduling_ctor_str(
+        invalid_multiple_scheduling *this, const char *str)
+{
+    TRACE("(%p %p)\n", this, str);
+    return __exception_ctor(this, str, &invalid_multiple_scheduling_vtable);
+}
+
+/* ??0invalid_multiple_scheduling at Concurrency@@QAA at XZ */
+/* ??0invalid_multiple_scheduling at Concurrency@@QAE at XZ */
+/* ??0invalid_multiple_scheduling at Concurrency@@QEAA at XZ */
+DEFINE_THISCALL_WRAPPER(invalid_multiple_scheduling_ctor, 4)
+invalid_multiple_scheduling* __thiscall invalid_multiple_scheduling_ctor(
+        invalid_multiple_scheduling *this)
+{
+    return invalid_multiple_scheduling_ctor_str(this, NULL);
+}
+
+DEFINE_THISCALL_WRAPPER(invalid_multiple_scheduling_copy_ctor,8)
+invalid_multiple_scheduling * __thiscall invalid_multiple_scheduling_copy_ctor(
+        invalid_multiple_scheduling * _this, const invalid_multiple_scheduling * rhs)
+{
+    TRACE("(%p %p)\n", _this, rhs);
+    return __exception_copy_ctor(_this, rhs, &invalid_multiple_scheduling_vtable);
+}
+
 /* ??0invalid_scheduler_policy_key at Concurrency@@QAE at PBD@Z */
 /* ??0invalid_scheduler_policy_key at Concurrency@@QEAA at PEBD@Z */
 DEFINE_THISCALL_WRAPPER(invalid_scheduler_policy_key_ctor_str, 8)
@@ -587,6 +619,8 @@ DEFINE_RTTI_DATA1(improper_scheduler_attach, 0, &cexception_rtti_base_descriptor
         ".?AVimproper_scheduler_attach at Concurrency@@")
 DEFINE_RTTI_DATA1(improper_scheduler_detach, 0, &cexception_rtti_base_descriptor,
         ".?AVimproper_scheduler_detach at Concurrency@@")
+DEFINE_RTTI_DATA1(invalid_multiple_scheduling, 0, &cexception_rtti_base_descriptor,
+        ".?AVinvalid_multiple_scheduling at Concurrency@@")
 DEFINE_RTTI_DATA1(invalid_scheduler_policy_key, 0, &cexception_rtti_base_descriptor,
         ".?AVinvalid_scheduler_policy_key at Concurrency@@")
 DEFINE_RTTI_DATA1(invalid_scheduler_policy_thread_specification, 0, &cexception_rtti_base_descriptor,
@@ -599,6 +633,7 @@ DEFINE_RTTI_DATA1(scheduler_resource_allocation_error, 0, &cexception_rtti_base_
 DEFINE_CXX_DATA1(improper_lock, &cexception_cxx_type_info, cexception_dtor)
 DEFINE_CXX_DATA1(improper_scheduler_attach, &cexception_cxx_type_info, cexception_dtor)
 DEFINE_CXX_DATA1(improper_scheduler_detach, &cexception_cxx_type_info, cexception_dtor)
+DEFINE_CXX_DATA1(invalid_multiple_scheduling, &cexception_cxx_type_info, cexception_dtor)
 DEFINE_CXX_DATA1(invalid_scheduler_policy_key, &cexception_cxx_type_info, cexception_dtor)
 DEFINE_CXX_DATA1(invalid_scheduler_policy_thread_specification, &cexception_cxx_type_info, cexception_dtor)
 DEFINE_CXX_DATA1(invalid_scheduler_policy_value, &cexception_cxx_type_info, cexception_dtor)
@@ -614,6 +649,9 @@ __ASM_BLOCK_BEGIN(concurrency_exception_vtables)
     __ASM_VTABLE(improper_scheduler_detach,
             VTABLE_ADD_FUNC(cexception_vector_dtor)
             VTABLE_ADD_FUNC(cexception_what));
+    __ASM_VTABLE(invalid_multiple_scheduling,
+            VTABLE_ADD_FUNC(cexception_vector_dtor)
+            VTABLE_ADD_FUNC(cexception_what));
     __ASM_VTABLE(invalid_scheduler_policy_key,
             VTABLE_ADD_FUNC(cexception_vector_dtor)
             VTABLE_ADD_FUNC(cexception_what));
@@ -3075,6 +3113,7 @@ void msvcrt_init_concurrency(void *base)
     init_improper_lock_rtti(base);
     init_improper_scheduler_attach_rtti(base);
     init_improper_scheduler_detach_rtti(base);
+    init_invalid_multiple_scheduling_rtti(base);
     init_invalid_scheduler_policy_key_rtti(base);
     init_invalid_scheduler_policy_thread_specification_rtti(base);
     init_invalid_scheduler_policy_value_rtti(base);
@@ -3091,6 +3130,7 @@ void msvcrt_init_concurrency(void *base)
     init_improper_lock_cxx(base);
     init_improper_scheduler_attach_cxx(base);
     init_improper_scheduler_detach_cxx(base);
+    init_invalid_multiple_scheduling_cxx(base);
     init_invalid_scheduler_policy_key_cxx(base);
     init_invalid_scheduler_policy_thread_specification_cxx(base);
     init_invalid_scheduler_policy_value_cxx(base);
-- 
2.37.0




More information about the wine-devel mailing list