summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Howard2014-12-18 20:04:11 +0100
committerSimon Howard2014-12-18 20:04:11 +0100
commitba8400b38d8264fe28ec03f772348b288a6ed075 (patch)
treed3396221ee319ebf8e5ca31b08f89b15083ab4bd
parent7311827fcff4ead8930f51c37dff9c0a01bff6e5 (diff)
downloadchocolate-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.ac2
-rw-r--r--src/i_main.c96
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