summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/syscalls.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2003-07-06 20:08:42 +0000
committerChristopher Faylor <me@cgf.cx>2003-07-06 20:08:42 +0000
commitb67171535879acf1ee66751d7ada33a99b27419e (patch)
tree12c125f2f62152b33e77f4b1d48247217e48dd9e /winsup/cygwin/syscalls.cc
parente2723b750a1106ea8b122f02b1a6364c92bc09b0 (diff)
downloadcygnal-b67171535879acf1ee66751d7ada33a99b27419e.tar.gz
cygnal-b67171535879acf1ee66751d7ada33a99b27419e.tar.bz2
cygnal-b67171535879acf1ee66751d7ada33a99b27419e.zip
* syscalls.cc (gethostid): Set thread affinity so that results are predictable.
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r--winsup/cygwin/syscalls.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index a22f4ee06..5ef18ce7e 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -2787,6 +2787,11 @@ long gethostid(void)
0x00290012};
bool has_cpuid = false;
+ sigframe thisframe (mainthread);
+
+ DWORD opmask = SetThreadAffinityMask (GetCurrentThread (), 1);
+ if (!opmask)
+ debug_printf ("SetThreadAffinityMask to 1 failed, %E");
if (!can_set_flag (0x00040000))
debug_printf ("386 processor - no cpuid");
@@ -2870,6 +2875,9 @@ long gethostid(void)
for (int i=0;i<13;i++)
hostid ^= ((data[i] << (i << 2)) | (data[i] >> (32 - (i << 2))));
+ if (opmask && !SetThreadAffinityMask (GetCurrentThread (), opmask))
+ debug_printf ("SetThreadAffinityMask to %p failed, %E", opmask);
+
debug_printf ("hostid: %08x", hostid);
return hostid;