diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec index 8c12c51567b..4d01027783a 100644 --- a/dlls/concrt140/concrt140.spec +++ b/dlls/concrt140/concrt140.spec @@ -104,10 +104,10 @@ @ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@PEBD@Z @ stub -arch=i386 ??0invalid_oversubscribe_operation@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@XZ -@ stub -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z -@ stub -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ +@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z +@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z +@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ +@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ @ stub -arch=i386 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@PEBD@Z @ stub -arch=win32 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@XZ diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 27d0de0901d..6b13f0400da 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -106,10 +106,10 @@ @ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@PEBD@Z @ stub -arch=win32 ??0invalid_oversubscribe_operation@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@XZ -@ stub -arch=win32 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z -@ stub -arch=win32 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ +@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z(ptr str) invalid_scheduler_policy_key_ctor_str +@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z(ptr str) invalid_scheduler_policy_key_ctor_str +@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ(ptr) invalid_scheduler_policy_key_ctor +@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ(ptr) invalid_scheduler_policy_key_ctor @ stub -arch=win32 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@PEBD@Z @ stub -arch=win32 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@XZ diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index d061ecd6b14..f6cf189592f 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -185,12 +185,12 @@ @ stub -arch=arm ??0invalid_oversubscribe_operation@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_oversubscribe_operation@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z(ptr str) invalid_scheduler_policy_key_ctor_str +@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z(ptr str) invalid_scheduler_policy_key_ctor_str +@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z(ptr str) invalid_scheduler_policy_key_ctor_str +@ cdecl -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ(ptr) invalid_scheduler_policy_key_ctor +@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ(ptr) invalid_scheduler_policy_key_ctor +@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ(ptr) invalid_scheduler_policy_key_ctor @ stub -arch=arm ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 2f29f7d2b4a..4a1d2ac0cd3 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -182,12 +182,12 @@ @ stub -arch=arm ??0invalid_oversubscribe_operation@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_oversubscribe_operation@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z(ptr str) invalid_scheduler_policy_key_ctor_str +@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z(ptr str) invalid_scheduler_policy_key_ctor_str +@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z(ptr str) invalid_scheduler_policy_key_ctor_str +@ cdecl -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ(ptr) invalid_scheduler_policy_key_ctor +@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ(ptr) invalid_scheduler_policy_key_ctor +@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ(ptr) invalid_scheduler_policy_key_ctor @ stub -arch=arm ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 14b6bd63845..c0b399f71f2 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -180,12 +180,12 @@ @ stub -arch=arm ??0invalid_oversubscribe_operation@Concurrency@@QAA@XZ @ stub -arch=i386 ??0invalid_oversubscribe_operation@Concurrency@@QAE@XZ @ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@XZ -@ stub -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z -@ stub -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z -@ stub -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z -@ stub -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ -@ stub -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ -@ stub -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ +@ cdecl -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z +@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z +@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z +@ cdecl -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ +@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ +@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ @ stub -arch=arm ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@PBD@Z @ stub -arch=i386 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@PBD@Z @ stub -arch=win64 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@PEBD@Z diff --git a/dlls/msvcrt/cpp.c b/dlls/msvcrt/cpp.c index b69ff9adbb4..c7c24ed3dec 100644 --- a/dlls/msvcrt/cpp.c +++ b/dlls/msvcrt/cpp.c @@ -775,6 +775,48 @@ void __thiscall MSVCRT_improper_lock_dtor(improper_lock * _this) TRACE("(%p)\n", _this); MSVCRT_exception_dtor(_this); } + +typedef exception invalid_scheduler_policy_key; +extern const vtable_ptr MSVCRT_invalid_scheduler_policy_key_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) +invalid_scheduler_policy_key* __thiscall invalid_scheduler_policy_key_ctor_str( + invalid_scheduler_policy_key *this, const char *str) +{ + TRACE("(%p %p)\n", this, str); + MSVCRT_exception_ctor(this, &str); + this->vtable = &MSVCRT_invalid_scheduler_policy_key_vtable; + return this; +} + +/* ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ */ +/* ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ */ +DEFINE_THISCALL_WRAPPER(invalid_scheduler_policy_key_ctor, 4) +invalid_scheduler_policy_key* __thiscall invalid_scheduler_policy_key_ctor( + invalid_scheduler_policy_key *this) +{ + return invalid_scheduler_policy_key_ctor_str(this, NULL); +} + +DEFINE_THISCALL_WRAPPER(MSVCRT_invalid_scheduler_policy_key_copy_ctor,8) +invalid_scheduler_policy_key * __thiscall MSVCRT_invalid_scheduler_policy_key_copy_ctor( + invalid_scheduler_policy_key * _this, const invalid_scheduler_policy_key * rhs) +{ + TRACE("(%p %p)\n", _this, rhs); + MSVCRT_exception_copy_ctor(_this, rhs); + _this->vtable = &MSVCRT_invalid_scheduler_policy_key_vtable; + return _this; +} + +DEFINE_THISCALL_WRAPPER(MSVCRT_invalid_scheduler_policy_key_dtor,4) +void __thiscall MSVCRT_invalid_scheduler_policy_key_dtor( + invalid_scheduler_policy_key * _this) +{ + TRACE("(%p)\n", _this); + MSVCRT_exception_dtor(_this); +} #endif #ifndef __GNUC__ @@ -810,6 +852,9 @@ __ASM_VTABLE(scheduler_resource_allocation_error, __ASM_VTABLE(improper_lock, VTABLE_ADD_FUNC(MSVCRT_exception_vector_dtor) VTABLE_ADD_FUNC(MSVCRT_what_exception)); +__ASM_VTABLE(invalid_scheduler_policy_key, + VTABLE_ADD_FUNC(MSVCRT_exception_vector_dtor) + VTABLE_ADD_FUNC(MSVCRT_what_exception)); #endif #ifndef __GNUC__ @@ -834,6 +879,8 @@ DEFINE_RTTI_DATA2( __non_rtti_object, 0, &bad_typeid_rtti_base_descriptor, &exce DEFINE_RTTI_DATA1(scheduler_resource_allocation_error, 0, &exception_rtti_base_descriptor, ".?AVscheduler_resource_allocation_error@Concurrency@@") DEFINE_RTTI_DATA1(improper_lock, 0, &exception_rtti_base_descriptor, ".?AVimproper_lock@Concurrency@@" ) +DEFINE_RTTI_DATA1(invalid_scheduler_policy_key, 0, &exception_rtti_base_descriptor, + ".?AVinvalid_scheduler_policy_key@Concurrency@@" ) #endif DEFINE_EXCEPTION_TYPE_INFO( exception, 0, NULL, NULL ) @@ -846,6 +893,7 @@ DEFINE_EXCEPTION_TYPE_INFO( bad_alloc, 1, &exception_cxx_type_info, NULL ) #if _MSVCR_VER >= 100 DEFINE_EXCEPTION_TYPE_INFO(scheduler_resource_allocation_error, 1, &exception_cxx_type_info, NULL) DEFINE_EXCEPTION_TYPE_INFO(improper_lock, 1, &exception_cxx_type_info, NULL) +DEFINE_EXCEPTION_TYPE_INFO(invalid_scheduler_policy_key, 1, &exception_cxx_type_info, NULL) #endif void msvcrt_init_exception(void *base) @@ -863,6 +911,7 @@ void msvcrt_init_exception(void *base) #if _MSVCR_VER >= 100 init_scheduler_resource_allocation_error_rtti(base); init_improper_lock_rtti(base); + init_invalid_scheduler_policy_key_rtti(base); #endif init_exception_cxx(base); @@ -875,6 +924,7 @@ void msvcrt_init_exception(void *base) #if _MSVCR_VER >= 100 init_scheduler_resource_allocation_error_cxx(base); init_improper_lock_cxx(base); + init_invalid_scheduler_policy_key_cxx(base); #endif #endif } @@ -899,6 +949,11 @@ void throw_exception(exception_type et, HRESULT hr, const char *str) improper_lock_ctor_str(&e, str); _CxxThrowException(&e, &improper_lock_exception_type); } + case EXCEPTION_INVALID_SCHEDULER_POLICY_KEY: { + invalid_scheduler_policy_key e; + invalid_scheduler_policy_key_ctor_str(&e, str); + _CxxThrowException(&e, &invalid_scheduler_policy_key_exception_type); + } #endif } } diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 2b9d2291ea1..60890221353 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -288,6 +288,7 @@ typedef enum { #if _MSVCR_VER >= 100 EXCEPTION_SCHEDULER_RESOURCE_ALLOCATION_ERROR, EXCEPTION_IMPROPER_LOCK, + EXCEPTION_INVALID_SCHEDULER_POLICY_KEY, #endif } exception_type; void throw_exception(exception_type, HRESULT, const char*) DECLSPEC_HIDDEN;