From 9058a1790fb8872d830f30d5b825669b56d12495 Mon Sep 17 00:00:00 2001 From: Daniel Lehman Date: Wed, 18 Jul 2018 07:15:45 -0700 Subject: [PATCH] msvcr110: Create current scheduler in _CurrentScheduler::_Id Signed-off-by: Daniel Lehman --- dlls/msvcr110/tests/msvcr110.c | 15 +++++++++++++++ dlls/msvcrt/scheduler.c | 1 + 2 files changed, 16 insertions(+) diff --git a/dlls/msvcr110/tests/msvcr110.c b/dlls/msvcr110/tests/msvcr110.c index 4b0043bc1a..dcee5c1ecc 100644 --- a/dlls/msvcr110/tests/msvcr110.c +++ b/dlls/msvcr110/tests/msvcr110.c @@ -35,6 +35,8 @@ static char* (CDECL *p_setlocale)(int category, const char* locale); static unsigned int (CDECL *p_CurrentScheduler_GetNumberOfVirtualProcessors)(void); static unsigned int (CDECL *p__CurrentScheduler__GetNumberOfVirtualProcessors)(void); +static unsigned int (CDECL *p_CurrentScheduler_Id)(void); +static unsigned int (CDECL *p__CurrentScheduler__Id)(void); static BOOL init(void) { @@ -50,12 +52,15 @@ static BOOL init(void) p_setlocale = (void*)GetProcAddress(module, "setlocale"); p_CurrentScheduler_GetNumberOfVirtualProcessors = (void*)GetProcAddress(module, "?GetNumberOfVirtualProcessors@CurrentScheduler@Concurrency@@SAIXZ"); p__CurrentScheduler__GetNumberOfVirtualProcessors = (void*)GetProcAddress(module, "?_GetNumberOfVirtualProcessors@_CurrentScheduler@details@Concurrency@@SAIXZ"); + p_CurrentScheduler_Id = (void*)GetProcAddress(module, "?Id@CurrentScheduler@Concurrency@@SAIXZ"); + p__CurrentScheduler__Id = (void*)GetProcAddress(module, "?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ"); return TRUE; } static void test_CurrentScheduler(void) { + unsigned int id; unsigned int ncpus; unsigned int expect; SYSTEM_INFO si; @@ -63,13 +68,23 @@ static void test_CurrentScheduler(void) expect = ~0; ncpus = p_CurrentScheduler_GetNumberOfVirtualProcessors(); ok(ncpus == expect, "expected %x, got %x\n", expect, ncpus); + id = p_CurrentScheduler_Id(); + ok(id == expect, "expected %u, got %u\n", expect, id); GetSystemInfo(&si); expect = si.dwNumberOfProcessors; + /* these _CurrentScheduler calls trigger scheduler creation + if either is commented out, the following CurrentScheduler (no _) tests will still work */ ncpus = p__CurrentScheduler__GetNumberOfVirtualProcessors(); + id = p__CurrentScheduler__Id(); ok(ncpus == expect, "expected %u, got %u\n", expect, ncpus); + ok(id == 0, "expected 0, got %u\n", id); + + /* these CurrentScheduler tests assume scheduler is created */ ncpus = p_CurrentScheduler_GetNumberOfVirtualProcessors(); ok(ncpus == expect, "expected %u, got %u\n", expect, ncpus); + id = p_CurrentScheduler_Id(); + ok(id == 0, "expected 0, got %u\n", id); } static void test_setlocale(void) diff --git a/dlls/msvcrt/scheduler.c b/dlls/msvcrt/scheduler.c index 6269c98cdb..c6c0fa7e38 100644 --- a/dlls/msvcrt/scheduler.c +++ b/dlls/msvcrt/scheduler.c @@ -1071,6 +1071,7 @@ unsigned int __cdecl _CurrentScheduler__GetNumberOfVirtualProcessors(void) unsigned int __cdecl _CurrentScheduler__Id(void) { TRACE("()\n"); + get_current_scheduler(); return CurrentScheduler_Id(); } -- 2.17.0