summaryrefslogtreecommitdiff
path: root/src/i_main.c
diff options
context:
space:
mode:
authorSimon Howard2008-12-09 20:35:17 +0000
committerSimon Howard2008-12-09 20:35:17 +0000
commitca3844dc5b138b19259e8dc9daaa397867834a5f (patch)
tree41b20406d45c74c5edbdd57b3a5e28e9e89fa441 /src/i_main.c
parenta0062502d183d5d526c1f801b1206234b664898b (diff)
downloadchocolate-doom-ca3844dc5b138b19259e8dc9daaa397867834a5f.tar.gz
chocolate-doom-ca3844dc5b138b19259e8dc9daaa397867834a5f.tar.bz2
chocolate-doom-ca3844dc5b138b19259e8dc9daaa397867834a5f.zip
Add check for sched_setaffinity to configure and only use it if it is
found. Display a message if we don't have any way to set processor affinity. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1413
Diffstat (limited to 'src/i_main.c')
-rw-r--r--src/i_main.c39
1 files changed, 27 insertions, 12 deletions
diff --git a/src/i_main.c b/src/i_main.c
index 74b164b1..c103296b 100644
--- a/src/i_main.c
+++ b/src/i_main.c
@@ -25,6 +25,8 @@
//-----------------------------------------------------------------------------
+#include "config.h"
+
#include "SDL.h"
#include <signal.h>
@@ -32,7 +34,9 @@
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
-#else
+#endif
+
+#ifdef HAVE_SCHED_SETAFFINITY
#include <unistd.h>
#include <sched.h>
#endif
@@ -42,25 +46,35 @@
#include "m_argv.h"
#include "d_main.h"
-int main(int argc, char **argv)
-{
+#if !defined(_WIN32) && !defined(HAVE_SCHED_SETAFFINITY)
+#warning No known way to set processor affinity on this platform.
+#warning You may experience crashes due to SDL_mixer.
+#endif
+
+int main(int argc, char **argv)
+{
// save arguments
- myargc = argc;
- myargv = argv;
+ myargc = argc;
+ myargv = argv;
+
+#ifdef _WIN32
// Set the process affinity mask so that all threads
- // run on the same processor. This is a workaround for a bug in
+ // run on the same processor. This is a workaround for a bug in
// SDL_mixer that causes occasional crashes.
-#ifdef _WIN32
if (!SetProcessAffinityMask(GetCurrentProcess(), 1))
{
fprintf(stderr, "Failed to set process affinity mask (%d)\n",
(int) GetLastError());
}
-#else
- // POSIX version:
+
+#endif
+
+#ifdef HAVE_SCHED_SETAFFINITY
+
+ // Linux version:
{
cpu_set_t set;
@@ -70,12 +84,13 @@ int main(int argc, char **argv)
sched_setaffinity(getpid(), sizeof(set), &set);
}
+
#endif
// start doom
-
- D_DoomMain ();
+
+ D_DoomMain ();
return 0;
-}
+}