Piotr Caban : msvcr100: Improve ThreadScheduler_ScheduleTask_loc stub.
Alexandre Julliard
julliard at winehq.org
Mon Apr 4 15:37:51 CDT 2022
Module: wine
Branch: master
Commit: 2d2dba53740a3bf6407e19c33e530a84945aceff
URL: https://source.winehq.org/git/wine.git/?a=commit;h=2d2dba53740a3bf6407e19c33e530a84945aceff
Author: Piotr Caban <piotr at codeweavers.com>
Date: Sun Apr 3 20:30:41 2022 +0200
msvcr100: Improve ThreadScheduler_ScheduleTask_loc stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45916
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msvcrt/concurrency.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c
index 54b2c49db99..2ca6421b0e7 100644
--- a/dlls/msvcrt/concurrency.c
+++ b/dlls/msvcrt/concurrency.c
@@ -1220,11 +1220,45 @@ DEFINE_THISCALL_WRAPPER(ThreadScheduler_CreateScheduleGroup, 4)
return NULL;
}
+typedef struct
+{
+ void (__cdecl *proc)(void*);
+ void *data;
+} schedule_task_arg;
+
+static void WINAPI schedule_task_proc(PTP_CALLBACK_INSTANCE instance, void *context, PTP_WORK work)
+{
+ schedule_task_arg arg;
+
+ arg = *(schedule_task_arg*)context;
+ operator_delete(context);
+ arg.proc(arg.data);
+}
+
DEFINE_THISCALL_WRAPPER(ThreadScheduler_ScheduleTask_loc, 16)
void __thiscall ThreadScheduler_ScheduleTask_loc(ThreadScheduler *this,
void (__cdecl *proc)(void*), void* data, /*location*/void *placement)
{
+ schedule_task_arg *arg;
+ TP_WORK *work;
+
FIXME("(%p %p %p %p) stub\n", this, proc, data, placement);
+
+ arg = operator_new(sizeof(*arg));
+ arg->proc = proc;
+ arg->data = data;
+
+ work = CreateThreadpoolWork(schedule_task_proc, arg, NULL);
+ if(!work) {
+ scheduler_resource_allocation_error e;
+
+ operator_delete(arg);
+ scheduler_resource_allocation_error_ctor_name(&e, NULL,
+ HRESULT_FROM_WIN32(GetLastError()));
+ _CxxThrowException(&e, &scheduler_resource_allocation_error_exception_type);
+ }
+ SubmitThreadpoolWork(work);
+ CloseThreadpoolWork(work);
}
DEFINE_THISCALL_WRAPPER(ThreadScheduler_ScheduleTask, 12)
@@ -1232,6 +1266,7 @@ void __thiscall ThreadScheduler_ScheduleTask(ThreadScheduler *this,
void (__cdecl *proc)(void*), void* data)
{
FIXME("(%p %p %p) stub\n", this, proc, data);
+ ThreadScheduler_ScheduleTask_loc(this, proc, data, NULL);
}
DEFINE_THISCALL_WRAPPER(ThreadScheduler_IsAvailableLocation, 8)
More information about the wine-cvs
mailing list