aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/win/util.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/win/util.c b/src/win/util.c
index deed2e35..72cb7492 100644
--- a/src/win/util.c
+++ b/src/win/util.c
@@ -512,19 +512,23 @@ int uv_uptime(double* uptime) {
unsigned int uv_available_parallelism(void) {
- SYSTEM_INFO info;
- unsigned rc;
+ DWORD_PTR procmask;
+ DWORD_PTR sysmask;
+ int count;
+ int i;
/* TODO(bnoordhuis) Use GetLogicalProcessorInformationEx() to support systems
* with > 64 CPUs? See https://github.com/libuv/libuv/pull/3458
*/
- GetSystemInfo(&info);
+ count = 0;
+ if (GetProcessAffinityMask(GetCurrentProcess(), &procmask, &sysmask))
+ for (i = 0; i < 64; i++) /* a.k.a. count = popcount(procmask); */
+ count += 1 & (procmask >> i);
- rc = info.dwNumberOfProcessors;
- if (rc < 1)
- rc = 1;
+ if (count > 0)
+ return count;
- return rc;
+ return 1;
}