msvcrt: Add ThreadScheduler::Release implementation.
Signed-off-by: Piotr Caban <piotr@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ac502ad05a
commit
d9dcdb0d51
|
@ -110,6 +110,7 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Scheduler scheduler;
|
Scheduler scheduler;
|
||||||
|
LONG ref;
|
||||||
unsigned int id;
|
unsigned int id;
|
||||||
unsigned int virt_proc_no;
|
unsigned int virt_proc_no;
|
||||||
SchedulerPolicy policy;
|
SchedulerPolicy policy;
|
||||||
|
@ -519,6 +520,12 @@ void __thiscall SchedulerPolicy_dtor(SchedulerPolicy *this)
|
||||||
MSVCRT_operator_delete(this->policy_container);
|
MSVCRT_operator_delete(this->policy_container);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ThreadScheduler_dtor(ThreadScheduler *this)
|
||||||
|
{
|
||||||
|
if(this->ref != 0) WARN("ref = %d\n", this->ref);
|
||||||
|
SchedulerPolicy_dtor(&this->policy);
|
||||||
|
}
|
||||||
|
|
||||||
DEFINE_THISCALL_WRAPPER(ThreadScheduler_Id, 4)
|
DEFINE_THISCALL_WRAPPER(ThreadScheduler_Id, 4)
|
||||||
unsigned int __thiscall ThreadScheduler_Id(const ThreadScheduler *this)
|
unsigned int __thiscall ThreadScheduler_Id(const ThreadScheduler *this)
|
||||||
{
|
{
|
||||||
|
@ -544,15 +551,22 @@ SchedulerPolicy* __thiscall ThreadScheduler_GetPolicy(
|
||||||
DEFINE_THISCALL_WRAPPER(ThreadScheduler_Reference, 4)
|
DEFINE_THISCALL_WRAPPER(ThreadScheduler_Reference, 4)
|
||||||
unsigned int __thiscall ThreadScheduler_Reference(ThreadScheduler *this)
|
unsigned int __thiscall ThreadScheduler_Reference(ThreadScheduler *this)
|
||||||
{
|
{
|
||||||
FIXME("(%p) stub\n", this);
|
TRACE("(%p)\n", this);
|
||||||
return 0;
|
return InterlockedIncrement(&this->ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_THISCALL_WRAPPER(ThreadScheduler_Release, 4)
|
DEFINE_THISCALL_WRAPPER(ThreadScheduler_Release, 4)
|
||||||
unsigned int __thiscall ThreadScheduler_Release(ThreadScheduler *this)
|
unsigned int __thiscall ThreadScheduler_Release(ThreadScheduler *this)
|
||||||
{
|
{
|
||||||
FIXME("(%p) stub\n", this);
|
unsigned int ret = InterlockedDecrement(&this->ref);
|
||||||
return 0;
|
|
||||||
|
TRACE("(%p)\n", this);
|
||||||
|
|
||||||
|
if(!ret) {
|
||||||
|
ThreadScheduler_dtor(this);
|
||||||
|
MSVCRT_operator_delete(this);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_THISCALL_WRAPPER(ThreadScheduler_RegisterShutdownEvent, 8)
|
DEFINE_THISCALL_WRAPPER(ThreadScheduler_RegisterShutdownEvent, 8)
|
||||||
|
@ -604,11 +618,6 @@ MSVCRT_bool __thiscall ThreadScheduler_IsAvailableLocation(
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ThreadScheduler_dtor(ThreadScheduler *this)
|
|
||||||
{
|
|
||||||
SchedulerPolicy_dtor(&this->policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFINE_THISCALL_WRAPPER(ThreadScheduler_vector_dtor, 8)
|
DEFINE_THISCALL_WRAPPER(ThreadScheduler_vector_dtor, 8)
|
||||||
Scheduler* __thiscall ThreadScheduler_vector_dtor(ThreadScheduler *this, unsigned int flags)
|
Scheduler* __thiscall ThreadScheduler_vector_dtor(ThreadScheduler *this, unsigned int flags)
|
||||||
{
|
{
|
||||||
|
@ -637,6 +646,7 @@ static ThreadScheduler* ThreadScheduler_ctor(ThreadScheduler *this,
|
||||||
TRACE("(%p)->()\n", this);
|
TRACE("(%p)->()\n", this);
|
||||||
|
|
||||||
this->scheduler.vtable = &MSVCRT_ThreadScheduler_vtable;
|
this->scheduler.vtable = &MSVCRT_ThreadScheduler_vtable;
|
||||||
|
this->ref = 1;
|
||||||
this->id = InterlockedIncrement(&scheduler_id);
|
this->id = InterlockedIncrement(&scheduler_id);
|
||||||
SchedulerPolicy_copy_ctor(&this->policy, policy);
|
SchedulerPolicy_copy_ctor(&this->policy, policy);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue