Piotr Caban : msvcrt: Add Scheduler:: SetDefaultSchedulerPolicy implementation.
Alexandre Julliard
julliard at winehq.org
Fri Mar 31 14:26:28 CDT 2017
Module: wine
Branch: master
Commit: b26fed8ad1913f6d5589e04982dfa440784cec02
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b26fed8ad1913f6d5589e04982dfa440784cec02
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Mar 30 22:47:44 2017 +0200
msvcrt: Add Scheduler::SetDefaultSchedulerPolicy implementation.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msvcrt/scheduler.c | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/scheduler.c b/dlls/msvcrt/scheduler.c
index 4a8eb8e..26ca900 100644
--- a/dlls/msvcrt/scheduler.c
+++ b/dlls/msvcrt/scheduler.c
@@ -132,6 +132,16 @@ extern const vtable_ptr MSVCRT_ThreadScheduler_vtable;
static int context_tls_index = TLS_OUT_OF_INDEXES;
+static CRITICAL_SECTION default_scheduler_cs;
+static CRITICAL_SECTION_DEBUG default_scheduler_cs_debug =
+{
+ 0, 0, &default_scheduler_cs,
+ { &default_scheduler_cs_debug.ProcessLocksList, &default_scheduler_cs_debug.ProcessLocksList },
+ 0, 0, { (DWORD_PTR)(__FILE__ ": default_scheduler_cs") }
+};
+static CRITICAL_SECTION default_scheduler_cs = { &default_scheduler_cs_debug, -1, 0, 0, 0, 0 };
+static SchedulerPolicy default_scheduler_policy;
+
static Context* try_get_current_context(void)
{
if (context_tls_index == TLS_OUT_OF_INDEXES)
@@ -745,14 +755,27 @@ Scheduler* __cdecl Scheduler_Create(const SchedulerPolicy *policy)
/* ?ResetDefaultSchedulerPolicy at Scheduler@Concurrency@@SAXXZ */
void __cdecl Scheduler_ResetDefaultSchedulerPolicy(void)
{
- FIXME("() stub\n");
+ TRACE("()\n");
+
+ EnterCriticalSection(&default_scheduler_cs);
+ if(default_scheduler_policy.policy_container)
+ SchedulerPolicy_dtor(&default_scheduler_policy);
+ SchedulerPolicy_ctor(&default_scheduler_policy);
+ LeaveCriticalSection(&default_scheduler_cs);
}
/* ?SetDefaultSchedulerPolicy at Scheduler@Concurrency@@SAXABVSchedulerPolicy at 2@@Z */
/* ?SetDefaultSchedulerPolicy at Scheduler@Concurrency@@SAXAEBVSchedulerPolicy at 2@@Z */
void __cdecl Scheduler_SetDefaultSchedulerPolicy(const SchedulerPolicy *policy)
{
- FIXME("(%p) stub\n", policy);
+ TRACE("(%p)\n", policy);
+
+ EnterCriticalSection(&default_scheduler_cs);
+ if(!default_scheduler_policy.policy_container)
+ SchedulerPolicy_copy_ctor(&default_scheduler_policy, policy);
+ else
+ SchedulerPolicy_op_assign(&default_scheduler_policy, policy);
+ LeaveCriticalSection(&default_scheduler_cs);
}
/* ?Create at CurrentScheduler@Concurrency@@SAXABVSchedulerPolicy at 2@@Z */
@@ -902,6 +925,8 @@ void msvcrt_free_scheduler(void)
{
if (context_tls_index != TLS_OUT_OF_INDEXES)
TlsFree(context_tls_index);
+ if(default_scheduler_policy.policy_container)
+ SchedulerPolicy_dtor(&default_scheduler_policy);
}
void msvcrt_free_scheduler_thread(void)
More information about the wine-cvs
mailing list