shithub: choc

Download patch

ref: ba8400b38d8264fe28ec03f772348b288a6ed075
parent: 7311827fcff4ead8930f51c37dff9c0a01bff6e5
author: Simon Howard <fraggle@soulsphere.org>
date: Thu Dec 18 15:04:11 EST 2014

Strip out CPU affinity hack.

This was added a long time ago, supposedly as a workaround for
SDL_mixer issues. It's not clear that this ever properly solved the
problem, and it seems unlikely that it's doing any good any more.
Quasar has pointed out that it actually impedes performance, and
some forks may want to use SMP (Strife: Veteran Edition had to
remove it).

This fixes #484 (thanks Quasar).

--- a/configure.ac
+++ b/configure.ac
@@ -93,7 +93,7 @@
     AC_CHECK_LIB(m, log)
 
     AC_CHECK_HEADERS([linux/kd.h dev/isa/spkrio.h dev/speaker/speaker.h])
-    AC_CHECK_FUNCS(mmap sched_setaffinity ioperm)
+    AC_CHECK_FUNCS(mmap ioperm)
 
     # OpenBSD I/O i386 library for I/O port access.
     # (64 bit has the same thing with a different name!)
--- a/src/i_main.c
+++ b/src/i_main.c
@@ -34,97 +34,6 @@
 
 void D_DoomMain (void);
 
-#if defined(_WIN32_WCE)
-
-// Windows CE?  I doubt it even supports SMP..
-
-static void LockCPUAffinity(void)
-{
-}
-
-#elif defined(_WIN32)
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-typedef BOOL (WINAPI *SetAffinityFunc)(HANDLE hProcess, DWORD mask);
-
-// This is a bit more complicated than it really needs to be.  We really
-// just need to call the SetProcessAffinityMask function, but that
-// function doesn't exist on systems before Windows 2000.  Instead,
-// dynamically look up the function and call the pointer to it.  This
-// way, the program will run on older versions of Windows (Win9x, etc.)
-
-static void LockCPUAffinity(void)
-{
-    HMODULE kernel32_dll;
-    SetAffinityFunc SetAffinity;
-
-    // Find the kernel interface DLL.
-
-    kernel32_dll = LoadLibrary("kernel32.dll");
-
-    if (kernel32_dll == NULL)
-    {
-        // This should never happen...
-
-        fprintf(stderr, "Failed to load kernel32.dll\n");
-        return;
-    }
-    // Find the SetProcessAffinityMask function.
-
-    SetAffinity = (SetAffinityFunc)GetProcAddress(kernel32_dll, "SetProcessAffinityMask");
-
-    // If the function was not found, we are on an old (Win9x) system
-    // that doesn't have this function.  That's no problem, because
-    // those systems don't support SMP anyway.
-
-    if (SetAffinity != NULL)
-    {
-        if (!SetAffinity(GetCurrentProcess(), 1))
-        {
-            fprintf(stderr, "Failed to set process affinity (%d)\n",
-                            (int) GetLastError());
-        }
-    }
-}
-
-#elif defined(HAVE_SCHED_SETAFFINITY)
-
-#include <unistd.h>
-#include <sched.h>
-
-// Unix (Linux) version:
-
-static void LockCPUAffinity(void)
-{
-#ifdef CPU_SET
-    cpu_set_t set;
-
-    CPU_ZERO(&set);
-    CPU_SET(0, &set);
-
-    sched_setaffinity(getpid(), sizeof(set), &set);
-#else
-    unsigned long mask = 1;
-    sched_setaffinity(getpid(), sizeof(mask), &mask);
-#endif
-}
-
-#else
-
-#warning No known way to set processor affinity on this platform.
-#warning You may experience crashes due to SDL_mixer.
-
-static void LockCPUAffinity(void)
-{
-    fprintf(stderr, 
-    "WARNING: No known way to set processor affinity on this platform.\n"
-    "         You may experience crashes due to SDL_mixer.\n");
-}
-
-#endif
-
 int main(int argc, char **argv)
 {
     // save arguments
@@ -131,11 +40,6 @@
 
     myargc = argc;
     myargv = argv;
-
-    // Only schedule on a single core, if we have multiple
-    // cores.  This is to work around a bug in SDL_mixer.
-
-    LockCPUAffinity();
 
     M_FindResponseFile();