[PATCH v6 1/8] msvcr100: Add _StructuredTaskCollection::_Schedule stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47375 Signed-off-by: Torge Matthies <tmatthies(a)codeweavers.com> --- dlls/concrt140/concrt140.spec | 6 +++--- dlls/msvcr100/msvcr100.spec | 4 ++-- dlls/msvcr110/msvcr110.spec | 6 +++--- dlls/msvcr120/msvcr120.spec | 6 +++--- dlls/msvcr120_app/msvcr120_app.spec | 6 +++--- dlls/msvcrt/concurrency.c | 27 +++++++++++++++++++++++++++ 6 files changed, 41 insertions(+), 14 deletions(-) diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec index 50db9348327b..6bb95661dd11 100644 --- a/dlls/concrt140/concrt140.spec +++ b/dlls/concrt140/concrt140.spec @@ -594,9 +594,9 @@ @ stub -arch=arm ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=i386 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z -@ stub -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z -@ stub -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z -@ stub -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z +@ thiscall -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule +@ thiscall -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule +@ thiscall -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule @ stub -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@PAVlocation(a)3@@Z @ stub -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@PAVlocation(a)3@@Z @ stub -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@PEAVlocation(a)3@@Z diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 19b4cbe96d75..2a03df03e33f 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -363,8 +363,8 @@ @ stub -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z @ stub -arch=win32 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z -@ stub -arch=win32 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z -@ stub -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z +@ thiscall -arch=win32 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule +@ thiscall -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule @ stub -arch=win32 ?_Schedule(a)_TaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_Schedule(a)_TaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z @ thiscall -arch=win32 ?_SetSpinCount@?$_SpinWait@$00(a)details@Concurrency@@QAEXI(a)Z(ptr long) SpinWait__SetSpinCount diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 23840f85edac..2888bd97e000 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -614,9 +614,9 @@ @ stub -arch=arm ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=i386 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z -@ stub -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z -@ stub -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z -@ stub -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z +@ thiscall -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule +@ thiscall -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule +@ thiscall -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule @ stub -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@PAVlocation(a)3@@Z @ stub -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@PAVlocation(a)3@@Z @ stub -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@PEAVlocation(a)3@@Z diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 64ddeed42f41..8ddc09bcaf8c 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -596,9 +596,9 @@ @ stub -arch=arm ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=i386 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z -@ stub -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z -@ stub -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z -@ stub -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z +@ thiscall -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule +@ thiscall -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule +@ thiscall -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule @ stub -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@PAVlocation(a)3@@Z @ stub -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@PAVlocation(a)3@@Z @ stub -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@PEAVlocation(a)3@@Z diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 05f408d68847..4eb7cb6a2989 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -592,9 +592,9 @@ @ stub -arch=arm ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=i386 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z -@ stub -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z -@ stub -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z -@ stub -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z +@ thiscall -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z(ptr ptr) msvcr120.?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z +@ thiscall -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z(ptr ptr) msvcr120.?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z +@ thiscall -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z(ptr ptr) msvcr120.?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z @ stub -arch=arm ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@PAVlocation(a)3@@Z @ stub -arch=i386 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@PAVlocation(a)3@@Z @ stub -arch=win64 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@PEAVlocation(a)3@@Z diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index 2ca6421b0e74..db6e34ad457d 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -174,6 +174,20 @@ typedef struct cs_queue #endif } cs_queue; +#if _MSVCR_VER >= 100 + +typedef struct +{ + char dummy; +} UnrealizedChore; + +typedef struct +{ + char dummy; +} StructuredTaskCollection; + +#endif /* _MSVCR_VER >= 100 */ + typedef struct { ULONG_PTR unk_thread_id; @@ -1741,6 +1755,19 @@ bool __thiscall SpinWait__SpinOnce(SpinWait *this) } } +#if _MSVCR_VER >= 100 + +/* ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z */ +/* ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z */ +/* ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z */ +DEFINE_THISCALL_WRAPPER(StructuredTaskCollection__Schedule, 8) +void __thiscall StructuredTaskCollection__Schedule(StructuredTaskCollection *this, UnrealizedChore *chore) +{ + FIXME("(%p %p): stub!\n", this, chore); +} + +#endif /* _MSVCR_VER >= 100 */ + /* ??0critical_section(a)Concurrency@@QAE(a)XZ */ /* ??0critical_section(a)Concurrency@@QEAA(a)XZ */ DEFINE_THISCALL_WRAPPER(critical_section_ctor, 4) -- 2.36.0
Signed-off-by: Torge Matthies <tmatthies(a)codeweavers.com> --- v5 -> v6: Fixed calling convention. dlls/concrt140/concrt140.spec | 6 +++--- dlls/msvcr100/msvcr100.spec | 4 ++-- dlls/msvcr110/msvcr110.spec | 6 +++--- dlls/msvcr120/msvcr120.spec | 6 +++--- dlls/msvcr120_app/msvcr120_app.spec | 6 +++--- dlls/msvcrt/concurrency.c | 9 +++++++++ 6 files changed, 23 insertions(+), 14 deletions(-) diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec index 6bb95661dd11..fbfad2deddfa 100644 --- a/dlls/concrt140/concrt140.spec +++ b/dlls/concrt140/concrt140.spec @@ -588,9 +588,9 @@ @ cdecl -arch=arm ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAAXXZ(ptr) SpinWait__Reset @ thiscall -arch=i386 ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAEXXZ(ptr) SpinWait__Reset @ cdecl -arch=win64 ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IEAAXXZ(ptr) SpinWait__Reset -@ stub -arch=arm ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z -@ stub -arch=i386 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z -@ stub -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z +@ stdcall -arch=arm ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait +@ stdcall -arch=i386 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait +@ stdcall -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait @ stub -arch=arm ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=i386 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 2a03df03e33f..4bf4353b85eb 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -359,8 +359,8 @@ @ cdecl -arch=win64 ?_Reset@?$_SpinWait@$00(a)details@Concurrency@@IEAAXXZ(ptr) SpinWait__Reset @ thiscall -arch=win32 ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAEXXZ(ptr) SpinWait__Reset @ cdecl -arch=win64 ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IEAAXXZ(ptr) SpinWait__Reset -@ stub -arch=win32 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z -@ stub -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z +@ stdcall -arch=win32 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait +@ stdcall -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait @ stub -arch=win32 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z @ thiscall -arch=win32 ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__Schedule diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 2888bd97e000..ac03607a2a02 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -608,9 +608,9 @@ @ cdecl -arch=arm ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAAXXZ(ptr) SpinWait__Reset @ thiscall -arch=i386 ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAEXXZ(ptr) SpinWait__Reset @ cdecl -arch=win64 ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IEAAXXZ(ptr) SpinWait__Reset -@ stub -arch=arm ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z -@ stub -arch=i386 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z -@ stub -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z +@ stdcall -arch=arm ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait +@ stdcall -arch=i386 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait +@ stdcall -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait @ stub -arch=arm ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=i386 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 8ddc09bcaf8c..1722cfc51f12 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -590,9 +590,9 @@ @ cdecl -arch=arm ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAAXXZ(ptr) SpinWait__Reset @ thiscall -arch=i386 ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAEXXZ(ptr) SpinWait__Reset @ cdecl -arch=win64 ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IEAAXXZ(ptr) SpinWait__Reset -@ stub -arch=arm ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z -@ stub -arch=i386 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z -@ stub -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z +@ stdcall -arch=arm ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait +@ stdcall -arch=i386 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait +@ stdcall -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z(ptr ptr) StructuredTaskCollection__RunAndWait @ stub -arch=arm ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=i386 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 4eb7cb6a2989..b768f72cc13d 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -586,9 +586,9 @@ @ cdecl -arch=arm ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAAXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAAXXZ @ thiscall -arch=i386 ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAEXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IAEXXZ @ cdecl -arch=win64 ?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IEAAXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$0A@@details(a)Concurrency@@IEAAXXZ -@ stub -arch=arm ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z -@ stub -arch=i386 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z -@ stub -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z +@ stdcall -arch=arm ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z(ptr ptr) msvcr120.?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z +@ stdcall -arch=i386 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z(ptr ptr) msvcr120.?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z +@ stdcall -arch=win64 ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z(ptr ptr) msvcr120.?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z @ stub -arch=arm ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=i386 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z @ stub -arch=win64 ?_RunAndWait(a)_TaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index db6e34ad457d..9b2831e67a2b 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -1757,6 +1757,15 @@ bool __thiscall SpinWait__SpinOnce(SpinWait *this) #if _MSVCR_VER >= 100 +/* ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z */ +/* ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z */ +/* ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z */ +/*enum Concurrency::details::_TaskCollectionStatus*/int __stdcall StructuredTaskCollection__RunAndWait(StructuredTaskCollection *this, UnrealizedChore *chore) +{ + FIXME("(%p %p): stub!\n", this, chore); + return 1; +} + /* ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z */ /* ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z */ /* ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z */ -- 2.36.0
Signed-off-by: Torge Matthies <tmatthies(a)codeweavers.com> --- dlls/concrt140/concrt140.spec | 6 +++--- dlls/msvcr120/msvcr120.spec | 4 ++-- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcrt/concurrency.c | 13 +++++++++++++ 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec index fbfad2deddfa..74a5fd13dfad 100644 --- a/dlls/concrt140/concrt140.spec +++ b/dlls/concrt140/concrt140.spec @@ -267,9 +267,9 @@ @ stub -arch=arm ??1_SpinLock(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??1_SpinLock(a)details@Concurrency@@QAE(a)XZ @ stub -arch=win64 ??1_SpinLock(a)details@Concurrency@@QEAA(a)XZ -@ stub -arch=arm ??1_StructuredTaskCollection(a)details@Concurrency@@QAA(a)XZ -@ stub -arch=i386 ??1_StructuredTaskCollection(a)details@Concurrency@@QAE(a)XZ -@ stub -arch=win64 ??1_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)XZ +@ thiscall -arch=arm ??1_StructuredTaskCollection(a)details@Concurrency@@QAA(a)XZ(ptr) StructuredTaskCollection_dtor +@ thiscall -arch=i386 ??1_StructuredTaskCollection(a)details@Concurrency@@QAE(a)XZ(ptr) StructuredTaskCollection_dtor +@ thiscall -arch=win64 ??1_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)XZ(ptr) StructuredTaskCollection_dtor @ stub -arch=arm ??1_TaskCollection(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??1_TaskCollection(a)details@Concurrency@@QAE(a)XZ @ stub -arch=win64 ??1_TaskCollection(a)details@Concurrency@@QEAA(a)XZ diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 1722cfc51f12..2deba8651853 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -290,8 +290,8 @@ @ stub -arch=arm ??1_SpinLock(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??1_SpinLock(a)details@Concurrency@@QAE(a)XZ @ stub -arch=win64 ??1_SpinLock(a)details@Concurrency@@QEAA(a)XZ -@ stub -arch=i386 ??1_StructuredTaskCollection(a)details@Concurrency@@QAE(a)XZ -@ stub -arch=win64 ??1_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)XZ +@ thiscall -arch=i386 ??1_StructuredTaskCollection(a)details@Concurrency@@QAE(a)XZ(ptr) StructuredTaskCollection_dtor +@ thiscall -arch=win64 ??1_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)XZ(ptr) StructuredTaskCollection_dtor @ stub -arch=arm ??1_TaskCollection(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??1_TaskCollection(a)details@Concurrency@@QAE(a)XZ @ stub -arch=win64 ??1_TaskCollection(a)details@Concurrency@@QEAA(a)XZ diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index b768f72cc13d..0021668f5e45 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -288,7 +288,7 @@ @ stub -arch=arm ??1_SpinLock(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??1_SpinLock(a)details@Concurrency@@QAE(a)XZ @ stub -arch=win64 ??1_SpinLock(a)details@Concurrency@@QEAA(a)XZ -@ stub -arch=i386 ??1_StructuredTaskCollection(a)details@Concurrency@@QAE(a)XZ +@ thiscall -arch=i386 ??1_StructuredTaskCollection(a)details@Concurrency@@QAE(a)XZ(ptr) msvcr120.??1_StructuredTaskCollection(a)details@Concurrency@@QAE(a)XZ @ stub -arch=arm ??1_TaskCollection(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??1_TaskCollection(a)details@Concurrency@@QAE(a)XZ @ stub -arch=win64 ??1_TaskCollection(a)details@Concurrency@@QEAA(a)XZ diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index 9b2831e67a2b..ac420eeb4fe2 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -1755,6 +1755,19 @@ bool __thiscall SpinWait__SpinOnce(SpinWait *this) } } +#if _MSVCR_VER >= 120 + +/* ??1_StructuredTaskCollection(a)details@Concurrency@@QAA(a)XZ */ +/* ??1_StructuredTaskCollection(a)details@Concurrency@@QAE(a)XZ */ +/* ??1_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)XZ */ +DEFINE_THISCALL_WRAPPER(StructuredTaskCollection_dtor, 4) +void __thiscall StructuredTaskCollection_dtor(StructuredTaskCollection *this) +{ + FIXME("(%p): stub!\n", this); +} + +#endif /* _MSVCR_VER >= 120 */ + #if _MSVCR_VER >= 100 /* ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z */ -- 2.36.0
Signed-off-by: Torge Matthies <tmatthies(a)codeweavers.com> --- dlls/concrt140/concrt140.spec | 6 +++--- dlls/msvcr110/msvcr110.spec | 6 +++--- dlls/msvcr120/msvcr120.spec | 6 +++--- dlls/msvcr120_app/msvcr120_app.spec | 6 +++--- dlls/msvcrt/concurrency.c | 13 +++++++++++++ 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec index 74a5fd13dfad..b06407bd5e3f 100644 --- a/dlls/concrt140/concrt140.spec +++ b/dlls/concrt140/concrt140.spec @@ -63,9 +63,9 @@ @ stub -arch=arm ??0_SpinLock(a)details@Concurrency@@QAA(a)ACJ@Z @ stub -arch=i386 ??0_SpinLock(a)details@Concurrency@@QAE(a)ACJ@Z @ stub -arch=win64 ??0_SpinLock(a)details@Concurrency@@QEAA(a)AECJ@Z -@ stub -arch=arm ??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z -@ stub -arch=i386 ??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z -@ stub -arch=win64 ??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z +@ thiscall -arch=arm ??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z(ptr ptr) StructuredTaskCollection_ctor +@ thiscall -arch=i386 ??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z(ptr ptr) StructuredTaskCollection_ctor +@ thiscall -arch=win64 ??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z(ptr ptr) StructuredTaskCollection_ctor @ stub -arch=arm ??0_TaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z @ stub -arch=i386 ??0_TaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z @ stub -arch=win64 ??0_TaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index ac03607a2a02..677d63ed4dbc 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -62,9 +62,9 @@ @ stub -arch=arm ??0_SpinLock(a)details@Concurrency@@QAA(a)ACJ@Z @ stub -arch=i386 ??0_SpinLock(a)details@Concurrency@@QAE(a)ACJ@Z @ stub -arch=win64 ??0_SpinLock(a)details@Concurrency@@QEAA(a)AECJ@Z -@ stub -arch=arm ??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z -@ stub -arch=i386 ??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z -@ stub -arch=win64 ??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z +@ thiscall -arch=arm ??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z(ptr ptr) StructuredTaskCollection_ctor +@ thiscall -arch=i386 ??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z(ptr ptr) StructuredTaskCollection_ctor +@ thiscall -arch=win64 ??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z(ptr ptr) StructuredTaskCollection_ctor @ stub -arch=arm ??0_TaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z @ stub -arch=i386 ??0_TaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z @ stub -arch=win64 ??0_TaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 2deba8651853..ef366565a8d1 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -59,9 +59,9 @@ @ stub -arch=arm ??0_SpinLock(a)details@Concurrency@@QAA(a)ACJ@Z @ stub -arch=i386 ??0_SpinLock(a)details@Concurrency@@QAE(a)ACJ@Z @ stub -arch=win64 ??0_SpinLock(a)details@Concurrency@@QEAA(a)AECJ@Z -@ stub -arch=arm ??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z -@ stub -arch=i386 ??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z -@ stub -arch=win64 ??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z +@ thiscall -arch=arm ??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z(ptr ptr) StructuredTaskCollection_ctor +@ thiscall -arch=i386 ??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z(ptr ptr) StructuredTaskCollection_ctor +@ thiscall -arch=win64 ??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z(ptr ptr) StructuredTaskCollection_ctor @ stub -arch=arm ??0_TaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z @ stub -arch=i386 ??0_TaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z @ stub -arch=win64 ??0_TaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 0021668f5e45..773ad5e93709 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -57,9 +57,9 @@ @ stub -arch=arm ??0_SpinLock(a)details@Concurrency@@QAA(a)ACJ@Z @ stub -arch=i386 ??0_SpinLock(a)details@Concurrency@@QAE(a)ACJ@Z @ stub -arch=win64 ??0_SpinLock(a)details@Concurrency@@QEAA(a)AECJ@Z -@ stub -arch=arm ??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z -@ stub -arch=i386 ??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z -@ stub -arch=win64 ??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z +@ thiscall -arch=arm ??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z(ptr ptr) msvcr120.??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z +@ thiscall -arch=i386 ??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z(ptr ptr) msvcr120.??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z +@ thiscall -arch=win64 ??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z(ptr ptr) msvcr120.??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z @ stub -arch=arm ??0_TaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z @ stub -arch=i386 ??0_TaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z @ stub -arch=win64 ??0_TaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index ac420eeb4fe2..4153661091e5 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -1755,6 +1755,19 @@ bool __thiscall SpinWait__SpinOnce(SpinWait *this) } } +#if _MSVCR_VER >= 110 + +/* ??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z */ +/* ??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z */ +/* ??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z */ +DEFINE_THISCALL_WRAPPER(StructuredTaskCollection_ctor, 8) +void __thiscall StructuredTaskCollection_ctor(StructuredTaskCollection *this, void *unk) +{ + FIXME("(%p): stub!\n", this); +} + +#endif /* _MSVCR_VER >= 100 */ + #if _MSVCR_VER >= 120 /* ??1_StructuredTaskCollection(a)details@Concurrency@@QAA(a)XZ */ -- 2.36.0
Hi Torge, I've sent modified version of your patch to wine-devel. Here's a short summary of changes: - changed calling convention in spec files - renamed the structure/function to _StrcuturedTaskCollection - changed return type of the constructor - added second argument type and name I would like to ask you to reorder your patches. Constructor stub makes it possible to add tests (with skip if _StructuredTaskCollection_ctor returns NULL). Could you please add the tests before the stubs? Thanks, Piotr
Signed-off-by: Torge Matthies <tmatthies(a)codeweavers.com> --- v5 -> v6: Fixed calling convention of _StructuredTaskCollection::_RunAndWait. dlls/msvcr120/tests/msvcr120.c | 131 +++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/dlls/msvcr120/tests/msvcr120.c b/dlls/msvcr120/tests/msvcr120.c index a3161266db41..1fde3afed4a8 100644 --- a/dlls/msvcr120/tests/msvcr120.c +++ b/dlls/msvcr120/tests/msvcr120.c @@ -95,6 +95,31 @@ typedef struct cs_queue int unknown; } cs_queue; +typedef struct UnrealizedChore +{ + void *unk1; + void (__cdecl *callback)(struct UnrealizedChore *_this, void *unk); + void *unk2; + void *unk3; + void *unk4; + void *unk5; + void *unk6; + void *unk7; + void *unk8; + void *unk9; +} UnrealizedChore; + +typedef struct +{ + void *unk1; + unsigned int unk2; + void *unk3; + void *volatile unk_chores; + unsigned int count; + unsigned int unk5; + void *unk6; +} StructuredTaskCollection; + typedef struct { ULONG_PTR unk_thread_id; @@ -204,6 +229,11 @@ static wint_t (__cdecl *p_towctrans)(wint_t, wctrans_t); #undef errno #define errno (*p_errno()) +static StructuredTaskCollection* (__thiscall *p__StructuredTaskCollection_ctor)(StructuredTaskCollection*, void*); +static void (__thiscall *p__StructuredTaskCollection_dtor)(StructuredTaskCollection*); +static void (__thiscall *p__StructuredTaskCollection__Schedule)(StructuredTaskCollection*, UnrealizedChore*); +static int (__stdcall *p__StructuredTaskCollection__RunAndWait)(StructuredTaskCollection*, UnrealizedChore*); + static critical_section* (__thiscall *p_critical_section_ctor)(critical_section*); static void (__thiscall *p_critical_section_dtor)(critical_section*); static void (__thiscall *p_critical_section_lock)(critical_section*); @@ -279,6 +309,14 @@ static BOOL init(void) SET(p_towctrans, "towctrans"); SET(p__Context__CurrentContext, "?_CurrentContext(a)_Context@details(a)Concurrency@@SA?AV123(a)XZ"); if(sizeof(void*) == 8) { /* 64-bit initialization */ + SET(p__StructuredTaskCollection_ctor, + "??0_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)PEAV_CancellationTokenState@12@@Z"); + SET(p__StructuredTaskCollection_dtor, + "??1_StructuredTaskCollection(a)details@Concurrency@@QEAA(a)XZ"); + SET(p__StructuredTaskCollection__Schedule, + "?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QEAAXPEAV_UnrealizedChore(a)23@@Z"); + SET(p__StructuredTaskCollection__RunAndWait, + "?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z"); SET(p_critical_section_ctor, "??0critical_section(a)Concurrency@@QEAA(a)XZ"); SET(p_critical_section_dtor, @@ -313,6 +351,12 @@ static BOOL init(void) "?CurrentContext(a)Context@Concurrency@@SAPEAV12(a)XZ"); } else { #ifdef __arm__ + SET(p__StructuredTaskCollection_ctor, + "??0_StructuredTaskCollection(a)details@Concurrency@@QAA(a)PAV_CancellationTokenState@12@@Z"); + SET(p__StructuredTaskCollection__Schedule, + "?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z"); + SET(p__StructuredTaskCollection__RunAndWait, + "?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z"); SET(p_critical_section_ctor, "??0critical_section(a)Concurrency@@QAA(a)XZ"); SET(p_critical_section_dtor, @@ -344,6 +388,14 @@ static BOOL init(void) SET(p__Condition_variable_notify_all, "?notify_all(a)_Condition_variable@details(a)Concurrency@@QAAXXZ"); #else + SET(p__StructuredTaskCollection_ctor, + "??0_StructuredTaskCollection(a)details@Concurrency@@QAE(a)PAV_CancellationTokenState@12@@Z"); + SET(p__StructuredTaskCollection_dtor, + "??1_StructuredTaskCollection(a)details@Concurrency@@QAE(a)XZ"); + SET(p__StructuredTaskCollection__Schedule, + "?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAEXPAV_UnrealizedChore(a)23@@Z"); + SET(p__StructuredTaskCollection__RunAndWait, + "?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z"); SET(p_critical_section_ctor, "??0critical_section(a)Concurrency@@QAE(a)XZ"); SET(p_critical_section_dtor, @@ -738,6 +790,84 @@ static unsigned __stdcall test_critical_section_scoped_lock(void *arg) return 0; } +static void setup_chore(UnrealizedChore *chore, void (__cdecl *callback)(struct UnrealizedChore *_this, void *unk)) +{ + chore->unk1 = (void*)0xdeadbeef; + chore->callback = callback; + chore->unk2 = NULL; + chore->unk3 = (void*)0xdead0000; + chore->unk4 = (void*)0xdead1000; + chore->unk5 = (void*)0xdead2000; + chore->unk6 = (void*)0xdead3000; + chore->unk7 = (void*)0xdead4000; + chore->unk8 = (void*)0xdead5000; + chore->unk9 = (void*)0xdead6000; +} + +static HANDLE chore_evt1; +static HANDLE chore_evt2; +static BOOL chore1_executed; +static BOOL chore2_executed; +static BOOL main_chore_executed; + +void __cdecl chore1_cb(struct UnrealizedChore *_this, void *unk) +{ + BOOL b; + DWORD ret; + b = SetEvent(chore_evt1); + ok(b, "SetEvent failed\n"); + ret = WaitForSingleObject(chore_evt2, 5000); + ok(ret == WAIT_OBJECT_0, "WaitForSingleObject returned %ld\n", ret); + chore1_executed = TRUE; +} + +void __cdecl chore2_cb(struct UnrealizedChore *_this, void *unk) +{ + BOOL b; + DWORD ret; + b = SetEvent(chore_evt2); + ok(b, "SetEvent failed\n"); + ret = WaitForSingleObject(chore_evt1, 5000); + ok(ret == WAIT_OBJECT_0, "WaitForSingleObject returned %ld\n", ret); + chore2_executed = TRUE; +} + +void __cdecl main_chore_cb(struct UnrealizedChore *_this, void *unk) +{ + main_chore_executed = TRUE; +} + +static void test_StructuredTaskCollection(void) +{ + StructuredTaskCollection task_coll; + UnrealizedChore chore1, chore2, main_chore; + int status; + + chore_evt1 = CreateEventW(NULL, FALSE, FALSE, NULL); + ok(chore_evt1 != NULL, "CreateEvent failed\n"); + chore_evt2 = CreateEventW(NULL, FALSE, FALSE, NULL); + ok(chore_evt2 != NULL, "CreateEvent failed\n"); + + call_func2(p__StructuredTaskCollection_ctor, &task_coll, NULL); + + /* test that all chores are run in parallel */ + setup_chore(&chore1, chore1_cb); + setup_chore(&chore2, chore2_cb); + setup_chore(&main_chore, main_chore_cb); + call_func2(p__StructuredTaskCollection__Schedule, &task_coll, &chore1); + call_func2(p__StructuredTaskCollection__Schedule, &task_coll, &chore2); + status = p__StructuredTaskCollection__RunAndWait(&task_coll, &main_chore); + ok(status == 1, "_StructuredTaskCollection::_RunAndWait failed: %d\n", status); + todo_wine ok(chore1_executed, "_StructuredTaskCollection::_RunAndWait did not execute chore1\n"); + todo_wine ok(chore2_executed, "_StructuredTaskCollection::_RunAndWait did not execute chore2\n"); + todo_wine ok(main_chore_executed, "_StructuredTaskCollection::_RunAndWait did not execute the main chore\n"); + + call_func1(p__StructuredTaskCollection_dtor, &task_coll); + + CloseHandle(chore_evt1); + CloseHandle(chore_evt2); +} + static void test_critical_section(void) { HANDLE thread; @@ -1282,6 +1412,7 @@ START_TEST(msvcr120) test_gettnames(p__Gettnames); test__strtof(); test_remainder(); + test_StructuredTaskCollection(); test_critical_section(); test_feenv(); test__wcreate_locale(); -- 2.36.0
Hi Torge, Please also address other previously mentioned comments. Thanks, Piotr
Signed-off-by: Torge Matthies <tmatthies(a)codeweavers.com> --- dlls/msvcr120/tests/msvcr120.c | 6 +- dlls/msvcrt/concurrency.c | 161 +++++++++++++++++++++++++++++++-- 2 files changed, 155 insertions(+), 12 deletions(-) diff --git a/dlls/msvcr120/tests/msvcr120.c b/dlls/msvcr120/tests/msvcr120.c index 1fde3afed4a8..a5e78fceb527 100644 --- a/dlls/msvcr120/tests/msvcr120.c +++ b/dlls/msvcr120/tests/msvcr120.c @@ -858,9 +858,9 @@ static void test_StructuredTaskCollection(void) call_func2(p__StructuredTaskCollection__Schedule, &task_coll, &chore2); status = p__StructuredTaskCollection__RunAndWait(&task_coll, &main_chore); ok(status == 1, "_StructuredTaskCollection::_RunAndWait failed: %d\n", status); - todo_wine ok(chore1_executed, "_StructuredTaskCollection::_RunAndWait did not execute chore1\n"); - todo_wine ok(chore2_executed, "_StructuredTaskCollection::_RunAndWait did not execute chore2\n"); - todo_wine ok(main_chore_executed, "_StructuredTaskCollection::_RunAndWait did not execute the main chore\n"); + ok(chore1_executed, "_StructuredTaskCollection::_RunAndWait did not execute chore1\n"); + ok(chore2_executed, "_StructuredTaskCollection::_RunAndWait did not execute chore2\n"); + ok(main_chore_executed, "_StructuredTaskCollection::_RunAndWait did not execute the main chore\n"); call_func1(p__StructuredTaskCollection_dtor, &task_coll); diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index 4153661091e5..eefc2b4274b6 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -22,8 +22,10 @@ #include <stdbool.h> #include "windef.h" +#include "winbase.h" #include "winternl.h" #include "wine/debug.h" +#include "wine/exception.h" #include "msvcrt.h" #include "cxx.h" @@ -176,14 +178,39 @@ typedef struct cs_queue #if _MSVCR_VER >= 100 -typedef struct -{ - char dummy; +/* This class seems to be 80 bytes big on x86-64, judging by the addresses passed in to + StructuredTaskCollection__RunAndWait */ +typedef struct UnrealizedChore +{ + void *unk1; + void (__cdecl *callback)(struct UnrealizedChore *this, void *unk); + void *unk2; + void *unk3; + void *unk4; + void *unk5; + void *unk6; + void *unk7; + void *unk8; + void *unk9; } UnrealizedChore; +typedef struct StructuredTaskCollectionChoresEntry +{ + struct StructuredTaskCollectionChoresEntry *next; + UnrealizedChore *chore; + TP_WORK *work; + volatile LONG *waiting_on_ptr; +} StructuredTaskCollectionChoresEntry; + typedef struct { - char dummy; + void *unk1; + unsigned int unk2; + void *unk3; + StructuredTaskCollectionChoresEntry *volatile unk_chores; + unsigned int count; + unsigned int unk5; + void *unk6; } StructuredTaskCollection; #endif /* _MSVCR_VER >= 100 */ @@ -1763,7 +1790,9 @@ bool __thiscall SpinWait__SpinOnce(SpinWait *this) DEFINE_THISCALL_WRAPPER(StructuredTaskCollection_ctor, 8) void __thiscall StructuredTaskCollection_ctor(StructuredTaskCollection *this, void *unk) { - FIXME("(%p): stub!\n", this); + FIXME("(%p): semi-stub!\n", this); + + memset(this, 0, sizeof(*this)); } #endif /* _MSVCR_VER >= 100 */ @@ -1776,20 +1805,122 @@ void __thiscall StructuredTaskCollection_ctor(StructuredTaskCollection *this, vo DEFINE_THISCALL_WRAPPER(StructuredTaskCollection_dtor, 4) void __thiscall StructuredTaskCollection_dtor(StructuredTaskCollection *this) { - FIXME("(%p): stub!\n", this); + StructuredTaskCollectionChoresEntry *entry, *next; + + TRACE("(%p)\n", this); + + for (entry = this->unk_chores; entry; entry = next) + { + next = entry->next; + operator_delete(entry); + } } #endif /* _MSVCR_VER >= 120 */ #if _MSVCR_VER >= 100 +static void CALLBACK StructuredTaskCollection_threadpool_cb_finally(BOOL normal, void *data) +{ + StructuredTaskCollectionChoresEntry *entry = data; + + TRACE("(%u %p)\n", normal, data); + + if (entry->waiting_on_ptr && InterlockedDecrement(entry->waiting_on_ptr) == 0) + RtlWakeAddressSingle((void*)entry->waiting_on_ptr); +} + +static inline void StructuredTaskCollection_run_chore(UnrealizedChore *chore, void* unk) +{ + if (chore->callback) + chore->callback(chore, unk); +} + +static void WINAPI StructuredTaskCollection_threadpool_cb(TP_CALLBACK_INSTANCE *inst, void *data, TP_WORK *work) +{ + StructuredTaskCollectionChoresEntry *entry = data; + + TRACE("(%p %p)\n", inst, data); + + __TRY + { + StructuredTaskCollection_run_chore(entry->chore, NULL); + } + __FINALLY_CTX(StructuredTaskCollection_threadpool_cb_finally, data) +} + /* ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAA?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z */ /* ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QAG?AW4_TaskCollectionStatus(a)23@PAV_UnrealizedChore(a)23@@Z */ /* ?_RunAndWait(a)_StructuredTaskCollection@details(a)Concurrency@@QEAA?AW4_TaskCollectionStatus(a)23@PEAV_UnrealizedChore(a)23@@Z */ /*enum Concurrency::details::_TaskCollectionStatus*/int __stdcall StructuredTaskCollection__RunAndWait(StructuredTaskCollection *this, UnrealizedChore *chore) { - FIXME("(%p %p): stub!\n", this, chore); - return 1; + StructuredTaskCollectionChoresEntry *chores, *entry, *next; + LONG total_count = 0, created_count = 0; + TP_POOL *tpool = NULL; + TP_CALLBACK_ENVIRON cbenv; + volatile LONG waiting_on = 0; + int ret = 1; + LONG val; + + TRACE("(%p %p)\n", this, chore); + + chores = InterlockedExchangePointer((void *volatile *)&this->unk_chores, NULL); + this->count = 0; + + if (!chores) + return ret; + + for (entry = chores; entry; entry = entry->next) + total_count++; + + tpool = CreateThreadpool(NULL); + if (!tpool || !SetThreadpoolThreadMinimum(tpool, total_count)) + goto done; + SetThreadpoolThreadMaximum(tpool, total_count); + + memset(&cbenv, 0, sizeof(cbenv)); + cbenv.Version = 1; + cbenv.Pool = tpool; + + for (entry = chores; entry; entry = entry->next) + { + entry->waiting_on_ptr = &waiting_on; + entry->work = CreateThreadpoolWork(StructuredTaskCollection_threadpool_cb, entry, &cbenv); + if (!entry->work) + { + ret = 0; + goto done; + } + created_count++; + } + + InterlockedExchange(&waiting_on, created_count); + for (entry = chores; entry; entry = entry->next) + SubmitThreadpoolWork(entry->work); + + if (chore) + StructuredTaskCollection_run_chore(chore, NULL); + + TRACE("waiting on %lu workers\n", created_count); + + while ((val = InterlockedCompareExchange(&waiting_on, 0, 0))) + RtlWaitOnAddress((void*)&waiting_on, (void*)&val, sizeof(waiting_on), NULL); + +done: + for (entry = chores; entry; entry = next) + { + if (created_count > 0) + { + CloseThreadpoolWork(entry->work); + created_count--; + } + next = entry->next; + operator_delete(entry); + } + + if (tpool) CloseThreadpool(tpool); + + return ret; } /* ?_Schedule(a)_StructuredTaskCollection@details(a)Concurrency@@QAAXPAV_UnrealizedChore(a)23@@Z */ @@ -1798,7 +1929,19 @@ void __thiscall StructuredTaskCollection_dtor(StructuredTaskCollection *this) DEFINE_THISCALL_WRAPPER(StructuredTaskCollection__Schedule, 8) void __thiscall StructuredTaskCollection__Schedule(StructuredTaskCollection *this, UnrealizedChore *chore) { - FIXME("(%p %p): stub!\n", this, chore); + StructuredTaskCollectionChoresEntry *entry, *next; + + TRACE("(%p %p)\n", this, chore); + + entry = operator_new(sizeof(StructuredTaskCollectionChoresEntry)); + entry->chore = chore; + do + { + next = this->unk_chores; + entry->next = next; + } + while (InterlockedCompareExchangePointer((void *volatile *)&this->unk_chores, entry, next) != next); + this->count++; } #endif /* _MSVCR_VER >= 100 */ -- 2.36.0
The pointer is needed for Crazy Machines 3 to not crash. Signed-off-by: Torge Matthies <tmatthies(a)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 677d63ed4dbc..7123762a9075 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -19,7 +19,7 @@ @ stub -arch=win64 ??0_CancellationTokenState(a)details@Concurrency@@AEAA(a)XZ @ stub -arch=arm ??0_Cancellation_beacon(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??0_Cancellation_beacon(a)details@Concurrency@@QAE(a)XZ -@ stub -arch=win64 ??0_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ +@ cdecl -arch=win64 ??0_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ(ptr) _Cancellation_beacon_ctor @ cdecl -arch=arm ??0_Condition_variable(a)details@Concurrency@@QAA(a)XZ(ptr) _Condition_variable_ctor @ thiscall -arch=i386 ??0_Condition_variable(a)details@Concurrency@@QAE(a)XZ(ptr) _Condition_variable_ctor @ cdecl -arch=win64 ??0_Condition_variable(a)details@Concurrency@@QEAA(a)XZ(ptr) _Condition_variable_ctor diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index ef366565a8d1..74e4adc2aa02 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -16,7 +16,7 @@ @ cdecl -arch=win64 ??0SchedulerPolicy(a)Concurrency@@QEAA(a)XZ(ptr) SchedulerPolicy_ctor @ stub -arch=arm ??0_Cancellation_beacon(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??0_Cancellation_beacon(a)details@Concurrency@@QAE(a)XZ -@ stub -arch=win64 ??0_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ +@ cdecl -arch=win64 ??0_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ(ptr) _Cancellation_beacon_ctor @ cdecl -arch=arm ??0_Condition_variable(a)details@Concurrency@@QAA(a)XZ(ptr) _Condition_variable_ctor @ thiscall -arch=i386 ??0_Condition_variable(a)details@Concurrency@@QAE(a)XZ(ptr) _Condition_variable_ctor @ cdecl -arch=win64 ??0_Condition_variable(a)details@Concurrency@@QEAA(a)XZ(ptr) _Condition_variable_ctor diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 773ad5e93709..727203259544 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -14,7 +14,7 @@ @ cdecl -arch=win64 ??0SchedulerPolicy(a)Concurrency@@QEAA(a)XZ(ptr) msvcr120.??0SchedulerPolicy(a)Concurrency@@QEAA(a)XZ @ stub -arch=arm ??0_Cancellation_beacon(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??0_Cancellation_beacon(a)details@Concurrency@@QAE(a)XZ -@ stub -arch=win64 ??0_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ +@ cdecl -arch=win64 ??0_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ(ptr) msvcr120.??0_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ @ cdecl -arch=arm ??0_Condition_variable(a)details@Concurrency@@QAA(a)XZ(ptr) msvcr120.??0_Condition_variable(a)details@Concurrency@@QAA(a)XZ @ thiscall -arch=i386 ??0_Condition_variable(a)details@Concurrency@@QAE(a)XZ(ptr) msvcr120.??0_Condition_variable(a)details@Concurrency@@QAE(a)XZ @ cdecl -arch=win64 ??0_Condition_variable(a)details@Concurrency@@QEAA(a)XZ(ptr) msvcr120.??0_Condition_variable(a)details@Concurrency@@QEAA(a)XZ diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index eefc2b4274b6..ce9402401054 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -308,6 +308,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; @@ -2506,6 +2510,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(a)details@Concurrency@@QEAA(a)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(a)details@Concurrency@@QAE(a)XZ */ /* ??0_Condition_variable(a)details@Concurrency@@QEAA(a)XZ */ DEFINE_THISCALL_WRAPPER(_Condition_variable_ctor, 4) -- 2.36.0
Signed-off-by: Torge Matthies <tmatthies(a)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 7123762a9075..487ec15d6af3 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -277,7 +277,7 @@ @ stub -arch=win64 ??1_CancellationTokenState(a)details@Concurrency@@UEAA(a)XZ @ stub -arch=arm ??1_Cancellation_beacon(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??1_Cancellation_beacon(a)details@Concurrency@@QAE(a)XZ -@ stub -arch=win64 ??1_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ +@ cdecl -arch=win64 ??1_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ(ptr) _Cancellation_beacon_dtor @ cdecl -arch=arm ??1_Condition_variable(a)details@Concurrency@@QAA(a)XZ(ptr) _Condition_variable_dtor @ thiscall -arch=i386 ??1_Condition_variable(a)details@Concurrency@@QAE(a)XZ(ptr) _Condition_variable_dtor @ cdecl -arch=win64 ??1_Condition_variable(a)details@Concurrency@@QEAA(a)XZ(ptr) _Condition_variable_dtor diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 74e4adc2aa02..c7a8044cb644 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -271,7 +271,7 @@ @ cdecl -arch=win64 ??1SchedulerPolicy(a)Concurrency@@QEAA(a)XZ(ptr) SchedulerPolicy_dtor @ stub -arch=arm ??1_Cancellation_beacon(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??1_Cancellation_beacon(a)details@Concurrency@@QAE(a)XZ -@ stub -arch=win64 ??1_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ +@ cdecl -arch=win64 ??1_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ(ptr) _Cancellation_beacon_dtor @ cdecl -arch=arm ??1_Condition_variable(a)details@Concurrency@@QAA(a)XZ(ptr) _Condition_variable_dtor @ thiscall -arch=i386 ??1_Condition_variable(a)details@Concurrency@@QAE(a)XZ(ptr) _Condition_variable_dtor @ cdecl -arch=win64 ??1_Condition_variable(a)details@Concurrency@@QEAA(a)XZ(ptr) _Condition_variable_dtor diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 727203259544..1ede71ca6790 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -269,7 +269,7 @@ @ cdecl -arch=win64 ??1SchedulerPolicy(a)Concurrency@@QEAA(a)XZ(ptr) msvcr120.??1SchedulerPolicy(a)Concurrency@@QEAA(a)XZ @ stub -arch=arm ??1_Cancellation_beacon(a)details@Concurrency@@QAA(a)XZ @ stub -arch=i386 ??1_Cancellation_beacon(a)details@Concurrency@@QAE(a)XZ -@ stub -arch=win64 ??1_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ +@ cdecl -arch=win64 ??1_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ(ptr) msvcr120.??1_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ @ cdecl -arch=arm ??1_Condition_variable(a)details@Concurrency@@QAA(a)XZ(ptr) msvcr120.??1_Condition_variable(a)details@Concurrency@@QAA(a)XZ @ thiscall -arch=i386 ??1_Condition_variable(a)details@Concurrency@@QAE(a)XZ(ptr) msvcr120.??1_Condition_variable(a)details@Concurrency@@QAE(a)XZ @ cdecl -arch=win64 ??1_Condition_variable(a)details@Concurrency@@QEAA(a)XZ(ptr) msvcr120.??1_Condition_variable(a)details@Concurrency@@QEAA(a)XZ diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index ce9402401054..7284ccaa265d 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -2525,6 +2525,13 @@ _Cancellation_beacon* __thiscall _Cancellation_beacon_ctor(_Cancellation_beacon return this; } +/* ??1_Cancellation_beacon(a)details@Concurrency@@QEAA(a)XZ */ +DEFINE_THISCALL_WRAPPER(_Cancellation_beacon_dtor, 4) +void __thiscall _Cancellation_beacon_dtor(_Cancellation_beacon *this) +{ + FIXME("(%p): stub!\n", this); +} + /* ??0_Condition_variable(a)details@Concurrency@@QAE(a)XZ */ /* ??0_Condition_variable(a)details@Concurrency@@QEAA(a)XZ */ DEFINE_THISCALL_WRAPPER(_Condition_variable_ctor, 4) -- 2.36.0
participants (2)
-
Piotr Caban -
Torge Matthies