CLIP STUDIO PAINT spams FIXMEs for these functions when starting up.
From: Aida Jonikienė aidas957@gmail.com
--- dlls/msvcrt/concurrency.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index 39059d66b38..d9639d1078e 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -1557,10 +1557,12 @@ DEFINE_THISCALL_WRAPPER(ThreadScheduler_ScheduleTask_loc, 16) void __thiscall ThreadScheduler_ScheduleTask_loc(ThreadScheduler *this, void (__cdecl *proc)(void*), void* data, /*location*/void *placement) { + static unsigned int once; schedule_task_arg *arg; TP_WORK *work;
- FIXME("(%p %p %p %p) stub\n", this, proc, data, placement); + if(!once++) + FIXME("(%p %p %p %p) semi-stub\n", this, proc, data, placement);
arg = operator_new(sizeof(*arg)); arg->proc = proc; @@ -1586,7 +1588,7 @@ DEFINE_THISCALL_WRAPPER(ThreadScheduler_ScheduleTask, 12) void __thiscall ThreadScheduler_ScheduleTask(ThreadScheduler *this, void (__cdecl *proc)(void*), void* data) { - FIXME("(%p %p %p) stub\n", this, proc, data); + TRACE("(%p %p %p)\n", this, proc, data); ThreadScheduler_ScheduleTask_loc(this, proc, data, NULL); }
From: Aida Jonikienė aidas957@gmail.com
--- dlls/msvcrt/concurrency.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index d9639d1078e..dc030b359da 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -2094,7 +2094,11 @@ _StructuredTaskCollection* __thiscall _StructuredTaskCollection_ctor( DEFINE_THISCALL_WRAPPER(_StructuredTaskCollection_dtor, 4) void __thiscall _StructuredTaskCollection_dtor(_StructuredTaskCollection *this) { - FIXME("(%p): stub!\n", this); + static unsigned int once; + + if (!once++) + FIXME("(%p): stub!\n", this); + if (this->count && !__uncaught_exception()) { missing_wait e; missing_wait_ctor_str(&e, "Missing call to _RunAndWait");
From: Aida Jonikienė aidas957@gmail.com
--- dlls/msvcrt/concurrency.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/dlls/msvcrt/concurrency.c b/dlls/msvcrt/concurrency.c index dc030b359da..769f0153d8a 100644 --- a/dlls/msvcrt/concurrency.c +++ b/dlls/msvcrt/concurrency.c @@ -861,7 +861,10 @@ void __cdecl Context_Block(void) /* ?_Yield@_Context@details@Concurrency@@SAXXZ */ void __cdecl Context_Yield(void) { - FIXME("()\n"); + static unsigned int once; + + if (!once++) + FIXME("()\n"); }
/* ?_SpinYield@Context@Concurrency@@SAXXZ */
Piotr Caban (@piotr) commented about dlls/msvcrt/concurrency.c:
void __thiscall ThreadScheduler_ScheduleTask_loc(ThreadScheduler *this, void (__cdecl *proc)(void*), void* data, /*location*/void *placement) {
- static unsigned int once; schedule_task_arg *arg; TP_WORK *work;
- FIXME("(%p %p %p %p) stub\n", this, proc, data, placement);
- if(!once++)
FIXME("(%p %p %p %p) semi-stub\n", this, proc, data, placement);
It's a useful trace, please change it to something like: `if(!once++) FIXME(...) else TRACE(...)`.
Piotr Caban (@piotr) commented about dlls/msvcrt/concurrency.c:
DEFINE_THISCALL_WRAPPER(_StructuredTaskCollection_dtor, 4) void __thiscall _StructuredTaskCollection_dtor(_StructuredTaskCollection *this) {
- FIXME("(%p): stub!\n", this);
- static unsigned int once;
- if (!once++)
FIXME("(%p): stub!\n", this);
- if (this->count && !__uncaught_exception()) { missing_wait e; missing_wait_ctor_str(&e, "Missing call to _RunAndWait");
```suggestion:-9+0 void __thiscall _StructuredTaskCollection_dtor(_StructuredTaskCollection *this) { TRACE("(%p)\n", this);
if (this->count && !__uncaught_exception()) { missing_wait e; WARN("missing call to _RunAndWait\n"); missing_wait_ctor_str(&e, "Missing call to _RunAndWait"); ```
The function looks implemented. AFAIR it was not really tested what happens in error case - hence the WARN message.