Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/msvcr120/tests/msvcr120.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcr120/tests/msvcr120.c b/dlls/msvcr120/tests/msvcr120.c index 88a32b382ef..ac35076af03 100644 --- a/dlls/msvcr120/tests/msvcr120.c +++ b/dlls/msvcr120/tests/msvcr120.c @@ -1375,7 +1375,7 @@ static void __cdecl chore_proc(_UnrealizedChore *_this) MSVCRT_bool canceling = call_func1( p__StructuredTaskCollection__IsCanceling, chore->chore.task_collection); - ok(!canceling, "Task is already canceling"); + ok(!canceling, "Task is already canceling\n"); }
if (!chore->wait_event) @@ -1399,7 +1399,7 @@ static void __cdecl chore_proc(_UnrealizedChore *_this) MSVCRT_bool canceling = call_func1( p__StructuredTaskCollection__IsCanceling, chore->chore.task_collection); - ok(canceling, "Task is not canceling"); + ok(canceling, "Task is not canceling\n"); } }
The pointer is needed for Crazy Machines 3 to not crash.
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcrt/concurrency.c | 19 +++++++++++++++++++ 4 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 24e7630194c..a1da7d8eb0e 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -19,7 +19,7 @@ @ stub -arch=win64 ??0_CancellationTokenState@details@Concurrency@@AEAA@XZ @ stub -arch=arm ??0_Cancellation_beacon@details@Concurrency@@QAA@XZ @ stub -arch=i386 ??0_Cancellation_beacon@details@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ +@ cdecl -arch=win64 ??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ(ptr) _Cancellation_beacon_ctor @ cdecl -arch=arm ??0_Condition_variable@details@Concurrency@@QAA@XZ(ptr) _Condition_variable_ctor @ thiscall -arch=i386 ??0_Condition_variable@details@Concurrency@@QAE@XZ(ptr) _Condition_variable_ctor @ cdecl -arch=win64 ??0_Condition_variable@details@Concurrency@@QEAA@XZ(ptr) _Condition_variable_ctor diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index b1258dad5de..a95a254bc7e 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -16,7 +16,7 @@ @ cdecl -arch=win64 ??0SchedulerPolicy@Concurrency@@QEAA@XZ(ptr) SchedulerPolicy_ctor @ stub -arch=arm ??0_Cancellation_beacon@details@Concurrency@@QAA@XZ @ stub -arch=i386 ??0_Cancellation_beacon@details@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ +@ cdecl -arch=win64 ??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ(ptr) _Cancellation_beacon_ctor @ cdecl -arch=arm ??0_Condition_variable@details@Concurrency@@QAA@XZ(ptr) _Condition_variable_ctor @ thiscall -arch=i386 ??0_Condition_variable@details@Concurrency@@QAE@XZ(ptr) _Condition_variable_ctor @ cdecl -arch=win64 ??0_Condition_variable@details@Concurrency@@QEAA@XZ(ptr) _Condition_variable_ctor diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 93ce779ea69..c2ce2b11811 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -14,7 +14,7 @@ @ cdecl -arch=win64 ??0SchedulerPolicy@Concurrency@@QEAA@XZ(ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QEAA@XZ @ stub -arch=arm ??0_Cancellation_beacon@details@Concurrency@@QAA@XZ @ stub -arch=i386 ??0_Cancellation_beacon@details@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ +@ cdecl -arch=win64 ??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ @ cdecl -arch=arm ??0_Condition_variable@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_Condition_variable@details@Concurrency@@QAA@XZ @ thiscall -arch=i386 ??0_Condition_variable@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_Condition_variable@details@Concurrency@@QAE@XZ @ cdecl -arch=win64 ??0_Condition_variable@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_Condition_variable@details@Concurrency@@QEAA@XZ diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index c982e367749..5fd8b8547dd 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -277,6 +277,10 @@ typedef struct cv_queue { LONG expired; } cv_queue;
+typedef struct { + void *unknown; +} _Cancellation_beacon; + typedef struct { /* cv_queue structure is not binary compatible */ cv_queue *queue; @@ -2395,6 +2399,21 @@ int __cdecl event_wait_for_multiple(event **events, size_t count, bool wait_all,
#if _MSVCR_VER >= 110
+struct { + void *unk; +} _Cancellation_beacon_unknown = { + 0x0 +}; + +/* ??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ */ +DEFINE_THISCALL_WRAPPER(_Cancellation_beacon_ctor, 4) +_Cancellation_beacon* __thiscall _Cancellation_beacon_ctor(_Cancellation_beacon *this) +{ + FIXME("(%p): stub!\n", this); + this->unknown = &_Cancellation_beacon_unknown; + return this; +} + /* ??0_Condition_variable@details@Concurrency@@QAE@XZ */ /* ??0_Condition_variable@details@Concurrency@@QEAA@XZ */ DEFINE_THISCALL_WRAPPER(_Condition_variable_ctor, 4)
Hi Torge,
Please focus on implementing _StructuredTaskCollection first. I think it should be quite easy to implement the class correctly after it's done. It's another case when incorrect implementation may cause hard to debug bugs.
Thanks, Piotr
On 7/13/22 12:20, Piotr Caban wrote:
Hi Torge,
Please focus on implementing _StructuredTaskCollection first. I think it should be quite easy to implement the class correctly after it's done. It's another case when incorrect implementation may cause hard to debug bugs.
I sent these first to get these out of the way before I send out the batch of patches that implement _StructuredTaskCollection::_Schedule/_Schedule_loc. But I can move the _Cancellation_beacon and _Context patches to the back again. Those are required for crazy machines to work btw, so I can't leave out the _IsSynchronouslyBlocked function. I could try to implement it, but I'm not sure if that's necessary for anything, CM3 doesn't seem to mind the stub.
Thanks, Piotr
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcrt/concurrency.c | 7 +++++++ 4 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index a1da7d8eb0e..92704561c23 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -277,7 +277,7 @@ @ stub -arch=win64 ??1_CancellationTokenState@details@Concurrency@@UEAA@XZ @ stub -arch=arm ??1_Cancellation_beacon@details@Concurrency@@QAA@XZ @ stub -arch=i386 ??1_Cancellation_beacon@details@Concurrency@@QAE@XZ -@ stub -arch=win64 ??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ +@ cdecl -arch=win64 ??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ(ptr) _Cancellation_beacon_dtor @ cdecl -arch=arm ??1_Condition_variable@details@Concurrency@@QAA@XZ(ptr) _Condition_variable_dtor @ thiscall -arch=i386 ??1_Condition_variable@details@Concurrency@@QAE@XZ(ptr) _Condition_variable_dtor @ cdecl -arch=win64 ??1_Condition_variable@details@Concurrency@@QEAA@XZ(ptr) _Condition_variable_dtor diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index a95a254bc7e..e880bd170f6 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -271,7 +271,7 @@ @ cdecl -arch=win64 ??1SchedulerPolicy@Concurrency@@QEAA@XZ(ptr) SchedulerPolicy_dtor @ stub -arch=arm ??1_Cancellation_beacon@details@Concurrency@@QAA@XZ @ stub -arch=i386 ??1_Cancellation_beacon@details@Concurrency@@QAE@XZ -@ stub -arch=win64 ??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ +@ cdecl -arch=win64 ??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ(ptr) _Cancellation_beacon_dtor @ cdecl -arch=arm ??1_Condition_variable@details@Concurrency@@QAA@XZ(ptr) _Condition_variable_dtor @ thiscall -arch=i386 ??1_Condition_variable@details@Concurrency@@QAE@XZ(ptr) _Condition_variable_dtor @ cdecl -arch=win64 ??1_Condition_variable@details@Concurrency@@QEAA@XZ(ptr) _Condition_variable_dtor diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index c2ce2b11811..3aa4b51d2a9 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -269,7 +269,7 @@ @ cdecl -arch=win64 ??1SchedulerPolicy@Concurrency@@QEAA@XZ(ptr) msvcr120.??1SchedulerPolicy@Concurrency@@QEAA@XZ @ stub -arch=arm ??1_Cancellation_beacon@details@Concurrency@@QAA@XZ @ stub -arch=i386 ??1_Cancellation_beacon@details@Concurrency@@QAE@XZ -@ stub -arch=win64 ??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ +@ cdecl -arch=win64 ??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ @ cdecl -arch=arm ??1_Condition_variable@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_Condition_variable@details@Concurrency@@QAA@XZ @ thiscall -arch=i386 ??1_Condition_variable@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_Condition_variable@details@Concurrency@@QAE@XZ @ cdecl -arch=win64 ??1_Condition_variable@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_Condition_variable@details@Concurrency@@QEAA@XZ diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index 5fd8b8547dd..ef97950f416 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -2414,6 +2414,13 @@ _Cancellation_beacon* __thiscall _Cancellation_beacon_ctor(_Cancellation_beacon return this; }
+/* ??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ */ +DEFINE_THISCALL_WRAPPER(_Cancellation_beacon_dtor, 4) +void __thiscall _Cancellation_beacon_dtor(_Cancellation_beacon *this) +{ + FIXME("(%p): stub!\n", this); +} + /* ??0_Condition_variable@details@Concurrency@@QAE@XZ */ /* ??0_Condition_variable@details@Concurrency@@QEAA@XZ */ DEFINE_THISCALL_WRAPPER(_Condition_variable_ctor, 4)
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/msvcr110/msvcr110.spec | 6 +++--- dlls/msvcr120/msvcr120.spec | 6 +++--- dlls/msvcr120_app/msvcr120_app.spec | 6 +++--- dlls/msvcrt/concurrency.c | 7 +++++++ 4 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 92704561c23..b867cbf69fb 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -550,9 +550,9 @@ @ stub -arch=arm ?_IsCanceling@_TaskCollection@details@Concurrency@@QAA_NXZ @ stub -arch=i386 ?_IsCanceling@_TaskCollection@details@Concurrency@@QAE_NXZ @ stub -arch=win64 ?_IsCanceling@_TaskCollection@details@Concurrency@@QEAA_NXZ -@ stub -arch=arm ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBA_NXZ -@ stub -arch=i386 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBE_NXZ -@ stub -arch=win64 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QEBA_NXZ +@ cdecl -arch=arm ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBA_NXZ(ptr) _Context_IsSynchronouslyBlocked +@ thiscall -arch=i386 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBE_NXZ(ptr) _Context_IsSynchronouslyBlocked +@ cdecl -arch=win64 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QEBA_NXZ(ptr) _Context_IsSynchronouslyBlocked @ stub -arch=win32 ?_Name_base@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z @ stub -arch=win64 ?_Name_base@type_info@@CAPEBDPEBV1@PEAU__type_info_node@@@Z @ stub -arch=win32 ?_Name_base_internal@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index e880bd170f6..e39b2e76aa1 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -541,9 +541,9 @@ @ stub -arch=arm ?_IsCanceling@_TaskCollection@details@Concurrency@@QAA_NXZ @ stub -arch=i386 ?_IsCanceling@_TaskCollection@details@Concurrency@@QAE_NXZ @ stub -arch=win64 ?_IsCanceling@_TaskCollection@details@Concurrency@@QEAA_NXZ -@ stub -arch=arm ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBA_NXZ -@ stub -arch=i386 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBE_NXZ -@ stub -arch=win64 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QEBA_NXZ +@ cdecl -arch=arm ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBA_NXZ(ptr) _Context_IsSynchronouslyBlocked +@ thiscall -arch=i386 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBE_NXZ(ptr) _Context_IsSynchronouslyBlocked +@ cdecl -arch=win64 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QEBA_NXZ(ptr) _Context_IsSynchronouslyBlocked @ stub -arch=win32 ?_Name_base@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z @ stub -arch=win64 ?_Name_base@type_info@@CAPEBDPEBV1@PEAU__type_info_node@@@Z @ stub -arch=win32 ?_Name_base_internal@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 3aa4b51d2a9..89165b204f9 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -538,9 +538,9 @@ @ stub -arch=arm ?_IsCanceling@_TaskCollection@details@Concurrency@@QAA_NXZ @ stub -arch=i386 ?_IsCanceling@_TaskCollection@details@Concurrency@@QAE_NXZ @ stub -arch=win64 ?_IsCanceling@_TaskCollection@details@Concurrency@@QEAA_NXZ -@ stub -arch=arm ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBA_NXZ -@ stub -arch=i386 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBE_NXZ -@ stub -arch=win64 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QEBA_NXZ +@ cdecl -arch=arm ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBA_NXZ(ptr) msvcr120.?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBA_NXZ +@ thiscall -arch=i386 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBE_NXZ(ptr) msvcr120.?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBE_NXZ +@ cdecl -arch=win64 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QEBA_NXZ(ptr) msvcr120.?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QEBA_NXZ @ stub -arch=win32 ?_Name_base@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z @ stub -arch=win64 ?_Name_base@type_info@@CAPEBDPEBV1@PEAU__type_info_node@@@Z @ stub -arch=win32 ?_Name_base_internal@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index ef97950f416..473f978bd61 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -761,6 +761,13 @@ _Context *__cdecl _Context__CurrentContext(_Context *ret) ret->context = Context_CurrentContext(); return ret; } + +DEFINE_THISCALL_WRAPPER(_Context_IsSynchronouslyBlocked, 4) +BOOL __thiscall _Context_IsSynchronouslyBlocked(const _Context *this) +{ + TRACE("(%p)\n", this); + return FALSE; +} #endif
DEFINE_THISCALL_WRAPPER(ExternalContextBase_GetId, 4)
Hi Torge,
I think it's better to not implement functions related to synchronisation/code execution over having stubs. I'm also afraid that in this case it's a lot of work to get it done properly (it e.g. involves rewriting some synchronization primitives to use Context for blocking).
Thanks, Piotr
Signed-off-by: Torge Matthies tmatthies@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@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ(ptr) invalid_multiple_scheduling_ctor +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ(ptr) invalid_multiple_scheduling_ctor +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ(ptr) invalid_multiple_scheduling_ctor @ stub -arch=arm ??0invalid_oversubscribe_operation@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_oversubscribe_operation@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@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@Concurrency@@QEAA@PEBD@Z @ stub -arch=win32 ??0invalid_link_target@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ -@ stub -arch=win32 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z -@ stub -arch=win32 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ +@ thiscall -arch=win32 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ thiscall -arch=win32 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ(ptr) invalid_multiple_scheduling_ctor +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ(ptr) invalid_multiple_scheduling_ctor @ stub -arch=win32 ??0invalid_operation@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_operation@Concurrency@@QEAA@PEBD@Z @ stub -arch=win32 ??0invalid_operation@Concurrency@@QAE@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@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ(ptr) invalid_multiple_scheduling_ctor +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ(ptr) invalid_multiple_scheduling_ctor +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ(ptr) invalid_multiple_scheduling_ctor @ stub -arch=arm ??0invalid_operation@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_operation@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_operation@Concurrency@@QEAA@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@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z(ptr ptr) invalid_multiple_scheduling_ctor_str +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ(ptr) invalid_multiple_scheduling_ctor +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ(ptr) invalid_multiple_scheduling_ctor +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ(ptr) invalid_multiple_scheduling_ctor @ stub -arch=arm ??0invalid_operation@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_operation@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_operation@Concurrency@@QEAA@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@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z(ptr ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z(ptr ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z(ptr ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z +@ cdecl -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ(ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QAA@XZ +@ thiscall -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ(ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QAE@XZ +@ cdecl -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ(ptr) msvcr120.??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ @ stub -arch=arm ??0invalid_operation@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_operation@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_operation@Concurrency@@QEAA@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@Concurrency@@QAA@PBD@Z */ +/* ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z */ +/* ??0invalid_multiple_scheduling@Concurrency@@QEAA@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@Concurrency@@QAA@XZ */ +/* ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ */ +/* ??0invalid_multiple_scheduling@Concurrency@@QEAA@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@Concurrency@@QAE@PBD@Z */ /* ??0invalid_scheduler_policy_key@Concurrency@@QEAA@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@Concurrency@@") DEFINE_RTTI_DATA1(improper_scheduler_detach, 0, &cexception_rtti_base_descriptor, ".?AVimproper_scheduler_detach@Concurrency@@") +DEFINE_RTTI_DATA1(invalid_multiple_scheduling, 0, &cexception_rtti_base_descriptor, + ".?AVinvalid_multiple_scheduling@Concurrency@@") DEFINE_RTTI_DATA1(invalid_scheduler_policy_key, 0, &cexception_rtti_base_descriptor, ".?AVinvalid_scheduler_policy_key@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);
The patch is causing compilation warning in i386 case: In file included from ../wine_src/dlls/msvcrt/cxx.h:19, from ../wine_src/dlls/msvcrt/concurrency.c:28: ../wine_src/dlls/msvcrt/concurrency.c:632:18: error: ‘invalid_multiple_scheduling_exception_type’ defined but not used [-Werror=unused-const-variable=] 632 | DEFINE_CXX_DATA1(invalid_multiple_scheduling, &cexception_cxx_type_info, cexception_dtor) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ ../wine_src/dlls/msvcrt/cppexcept.h:178:33: note: in definition of macro ‘DEFINE_CXX_EXCEPTION’ 178 | static const cxx_exception_type type ## _exception_type = { \ | ^~~~ ../wine_src/dlls/msvcrt/cppexcept.h:241:5: note: in expansion of macro ‘DEFINE_CXX_DATA’ 241 | DEFINE_CXX_DATA(name, 1, cl1, NULL, dtor) | ^~~~~~~~~~~~~~~ ../wine_src/dlls/msvcrt/concurrency.c:632:1: note: in expansion of macro ‘DEFINE_CXX_DATA1’ 632 | DEFINE_CXX_DATA1(invalid_multiple_scheduling, &cexception_cxx_type_info, cexception_dtor) | ^~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors
Thanks, Piotr