diff options
author | Simon Howard | 2014-12-18 20:04:11 +0100 |
---|---|---|
committer | Simon Howard | 2014-12-18 20:04:11 +0100 |
commit | ba8400b38d8264fe28ec03f772348b288a6ed075 (patch) | |
tree | d3396221ee319ebf8e5ca31b08f89b15083ab4bd | |
parent | 7311827fcff4ead8930f51c37dff9c0a01bff6e5 (diff) | |
download | chocolate-doom-ba8400b38d8264fe28ec03f772348b288a6ed075.tar.gz chocolate-doom-ba8400b38d8264fe28ec03f772348b288a6ed075.tar.bz2 chocolate-doom-ba8400b38d8264fe28ec03f772348b288a6ed075.zip |
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).
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/i_main.c | 96 |
2 files changed, 1 insertions, 97 deletions
diff --git a/configure.ac b/configure.ac index 8aef46fb..3e767faf 100644 --- a/configure.ac +++ b/configure.ac @@ -93,7 +93,7 @@ AC_SDL_MAIN_WORKAROUND([ 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!) diff --git a/src/i_main.c b/src/i_main.c index 7d1d960d..7bbccc88 100644 --- 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 @@ -132,11 +41,6 @@ int main(int argc, char **argv) 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(); // start doom |