diff --git a/configure.in b/configure.in index 0e720e38b..ab8c29077 100644 --- a/configure.in +++ b/configure.in @@ -1694,33 +1694,6 @@ AC_HELP_STRING([--enable-input-tslib], [use the Touchscreen library for input [[ fi } -dnl See if we can use GNU pth library for threads -CheckPTH() -{ - dnl Check for pth support - AC_ARG_ENABLE(pth, -AC_HELP_STRING([--enable-pth], [use GNU pth library for multi-threading [[default=yes]]]), - , enable_pth=yes) - if test x$enable_threads = xyes -a x$enable_pth = xyes; then - AC_PATH_PROG(PTH_CONFIG, pth-config, no) - if test "$PTH_CONFIG" = "no"; then - use_pth=no - else - use_pth=yes - fi - AC_MSG_CHECKING(pth) - AC_MSG_RESULT($use_pth) - if test "x$use_pth" = xyes; then - AC_DEFINE(SDL_THREAD_PTH) - SOURCES="$SOURCES $srcdir/src/thread/pth/*.c" - SOURCES="$SOURCES $srcdir/src/thread/generic/SDL_syssem.c" - SDL_CFLAGS="$SDL_CFLAGS `$PTH_CONFIG --cflags`" - SDL_LIBS="$SDL_LIBS `$PTH_CONFIG --libs --all`" - have_threads=yes - fi - fi -} - dnl See what type of thread model to use on Linux and Solaris CheckPTHREAD() { @@ -1892,8 +1865,6 @@ AC_HELP_STRING([--enable-pthread-sem], [use pthread semaphores [[default=yes]]]) SOURCES="$SOURCES $srcdir/src/thread/pthread/SDL_syscond.c" have_threads=yes - else - CheckPTH fi fi } diff --git a/include/SDL_config.h.in b/include/SDL_config.h.in index 47b7a22cd..5c47f11b2 100644 --- a/include/SDL_config.h.in +++ b/include/SDL_config.h.in @@ -236,7 +236,6 @@ /* Enable various threading systems */ #undef SDL_THREAD_BEOS #undef SDL_THREAD_NDS -#undef SDL_THREAD_PTH #undef SDL_THREAD_PTHREAD #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP diff --git a/src/SDL.c b/src/SDL.c index 932803bad..14093f844 100644 --- a/src/SDL.c +++ b/src/SDL.c @@ -31,10 +31,6 @@ #include "video/SDL_leaks.h" #endif -#if SDL_THREAD_PTH -#include -#endif - /* Initialization/Cleanup routines */ #if !SDL_JOYSTICK_DISABLED extern int SDL_JoystickInit(void); @@ -152,12 +148,6 @@ SDL_InitSubSystem(Uint32 flags) int SDL_Init(Uint32 flags) { -#if !SDL_THREADS_DISABLED && SDL_THREAD_PTH - if (!pth_init()) { - return -1; - } -#endif - if (SDL_AssertionsInit() < 0) { return -1; } @@ -266,9 +256,6 @@ SDL_Quit(void) SDL_AssertionsQuit(); -#if !SDL_THREADS_DISABLED && SDL_THREAD_PTH - pth_kill(); -#endif #ifdef DEBUG_BUILD printf("[SDL_Quit] : Returning!\n"); fflush(stdout); diff --git a/src/thread/SDL_thread_c.h b/src/thread/SDL_thread_c.h index 07b77d1a2..1dde9cadc 100644 --- a/src/thread/SDL_thread_c.h +++ b/src/thread/SDL_thread_c.h @@ -31,8 +31,6 @@ #include "beos/SDL_systhread_c.h" #elif SDL_THREAD_EPOC #include "epoc/SDL_systhread_c.h" -#elif SDL_THREAD_PTH -#include "pth/SDL_systhread_c.h" #elif SDL_THREAD_PTHREAD #include "pthread/SDL_systhread_c.h" #elif SDL_THREAD_SPROC diff --git a/src/thread/pth/SDL_syscond.c b/src/thread/pth/SDL_syscond.c deleted file mode 100644 index 4f4365c4a..000000000 --- a/src/thread/pth/SDL_syscond.c +++ /dev/null @@ -1,173 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -/* - * GNU pth conditions variables - * - * Patrice Mandin - */ - -#include - -#include "SDL_thread.h" -#include "SDL_sysmutex_c.h" - -struct SDL_cond -{ - pth_cond_t condpth_p; -}; - -/* Create a condition variable */ -SDL_cond * -SDL_CreateCond(void) -{ - SDL_cond *cond; - - cond = (SDL_cond *) SDL_malloc(sizeof(SDL_cond)); - if (cond) { - if (pth_cond_init(&(cond->condpth_p)) < 0) { - SDL_SetError("pthread_cond_init() failed"); - SDL_free(cond); - cond = NULL; - } - } else { - SDL_OutOfMemory(); - } - return (cond); -} - -/* Destroy a condition variable */ -void -SDL_DestroyCond(SDL_cond * cond) -{ - if (cond) { - SDL_free(cond); - } -} - -/* Restart one of the threads that are waiting on the condition variable */ -int -SDL_CondSignal(SDL_cond * cond) -{ - int retval; - - if (!cond) { - SDL_SetError("Passed a NULL condition variable"); - return -1; - } - - retval = 0; - if (pth_cond_notify(&(cond->condpth_p), FALSE) != 0) { - SDL_SetError("pth_cond_notify() failed"); - retval = -1; - } - return retval; -} - -/* Restart all threads that are waiting on the condition variable */ -int -SDL_CondBroadcast(SDL_cond * cond) -{ - int retval; - - if (!cond) { - SDL_SetError("Passed a NULL condition variable"); - return -1; - } - - retval = 0; - if (pth_cond_notify(&(cond->condpth_p), TRUE) != 0) { - SDL_SetError("pth_cond_notify() failed"); - retval = -1; - } - return retval; -} - -/* Wait on the condition variable for at most 'ms' milliseconds. - The mutex must be locked before entering this function! - The mutex is unlocked during the wait, and locked again after the wait. - -Typical use: - -Thread A: - SDL_LockMutex(lock); - while ( ! condition ) { - SDL_CondWait(cond); - } - SDL_UnlockMutex(lock); - -Thread B: - SDL_LockMutex(lock); - ... - condition = true; - ... - SDL_UnlockMutex(lock); - */ -int -SDL_CondWaitTimeout(SDL_cond * cond, SDL_mutex * mutex, Uint32 ms) -{ - int retval; - pth_event_t ev; - int sec; - - if (!cond) { - SDL_SetError("Passed a NULL condition variable"); - return -1; - } - - retval = 0; - - sec = ms / 1000; - ev = pth_event(PTH_EVENT_TIME, - pth_timeout(sec, (ms - sec * 1000) * 1000)); - - if (pth_cond_await(&(cond->condpth_p), &(mutex->mutexpth_p), ev) != 0) { - SDL_SetError("pth_cond_await() failed"); - retval = -1; - } - - pth_event_free(ev, PTH_FREE_ALL); - - return retval; -} - -/* Wait on the condition variable forever */ -int -SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex) -{ - int retval; - - if (!cond) { - SDL_SetError("Passed a NULL condition variable"); - return -1; - } - - retval = 0; - if (pth_cond_await(&(cond->condpth_p), &(mutex->mutexpth_p), NULL) != 0) { - SDL_SetError("pth_cond_await() failed"); - retval = -1; - } - return retval; -} - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/thread/pth/SDL_sysmutex.c b/src/thread/pth/SDL_sysmutex.c deleted file mode 100644 index 5ca148113..000000000 --- a/src/thread/pth/SDL_sysmutex.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -/* - * GNU pth mutexes - * - * Patrice Mandin - */ - -#include - -#include "SDL_mutex.h" -#include "SDL_sysmutex_c.h" - -/* Create a mutex */ -SDL_mutex * -SDL_CreateMutex(void) -{ - SDL_mutex *mutex; - - /* Allocate mutex memory */ - mutex = (SDL_mutex *) SDL_malloc(sizeof(*mutex)); - if (mutex) { - /* Create the mutex, with initial value signaled */ - if (!pth_mutex_init(&(mutex->mutexpth_p))) { - SDL_SetError("Couldn't create mutex"); - SDL_free(mutex); - mutex = NULL; - } - } else { - SDL_OutOfMemory(); - } - return (mutex); -} - -/* Free the mutex */ -void -SDL_DestroyMutex(SDL_mutex * mutex) -{ - if (mutex) { - SDL_free(mutex); - } -} - -/* Lock the mutex */ -int -SDL_mutexP(SDL_mutex * mutex) -{ - if (mutex == NULL) { - SDL_SetError("Passed a NULL mutex"); - return -1; - } - - pth_mutex_acquire(&(mutex->mutexpth_p), FALSE, NULL); - - return (0); -} - -/* Unlock the mutex */ -int -SDL_mutexV(SDL_mutex * mutex) -{ - if (mutex == NULL) { - SDL_SetError("Passed a NULL mutex"); - return -1; - } - - pth_mutex_release(&(mutex->mutexpth_p)); - - return (0); -} - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/thread/pth/SDL_sysmutex_c.h b/src/thread/pth/SDL_sysmutex_c.h deleted file mode 100644 index 0ca819763..000000000 --- a/src/thread/pth/SDL_sysmutex_c.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -#ifndef _SDL_SYSMUTEX_C_H_ -#define _SDL_SYSMUTEX_C_H_ - -struct SDL_mutex -{ - pth_mutex_t mutexpth_p; -}; - -#endif /* _SDL_SYSMUTEX_C_H_ */ -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/thread/pth/SDL_systhread.c b/src/thread/pth/SDL_systhread.c deleted file mode 100644 index 90ab53fad..000000000 --- a/src/thread/pth/SDL_systhread.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -/* - * GNU pth threads - * - * Patrice Mandin - */ - -#include -#include - -#include "SDL_thread.h" -#include "../SDL_thread_c.h" -#include "../SDL_systhread.h" - -/* List of signals to mask in the subthreads */ -static int sig_list[] = { - SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGCHLD, SIGWINCH, - SIGVTALRM, SIGPROF, 0 -}; - -static void * -RunThread(void *data) -{ - SDL_RunThread(data); - pth_exit((void *) 0); - return ((void *) 0); /* Prevent compiler warning */ -} - -int -SDL_SYS_CreateThread(SDL_Thread * thread, void *args) -{ - pth_attr_t type; - - /* Create a new attribute */ - type = pth_attr_new(); - if (type == NULL) { - SDL_SetError("Couldn't initialize pth attributes"); - return (-1); - } - pth_attr_set(type, PTH_ATTR_JOINABLE, TRUE); - - /* Create the thread and go! */ - thread->handle = pth_spawn(type, RunThread, args); - if (thread->handle == NULL) { - SDL_SetError("Not enough resources to create thread"); - return (-1); - } - return (0); -} - -void -SDL_SYS_SetupThread(void) -{ - int i; - sigset_t mask; - int oldstate; - - /* Mask asynchronous signals for this thread */ - sigemptyset(&mask); - for (i = 0; sig_list[i]; ++i) { - sigaddset(&mask, sig_list[i]); - } - pth_sigmask(SIG_BLOCK, &mask, 0); - - /* Allow ourselves to be asynchronously cancelled */ - pth_cancel_state(PTH_CANCEL_ASYNCHRONOUS, &oldstate); -} - -SDL_threadID -SDL_ThreadID(void) -{ - return ((SDL_threadID) pth_self()); -} - -void -SDL_SYS_WaitThread(SDL_Thread * thread) -{ - pth_join(thread->handle, NULL); -} - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/thread/pth/SDL_systhread_c.h b/src/thread/pth/SDL_systhread_c.h deleted file mode 100644 index 8b06ef293..000000000 --- a/src/thread/pth/SDL_systhread_c.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - SDL - Simple DirectMedia Layer - Copyright (C) 1997-2009 Sam Lantinga - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Sam Lantinga - slouken@libsdl.org -*/ -#include "SDL_config.h" - -#ifndef _SDL_SYSTHREAD_C_H_ -#define _SDL_SYSTHREAD_C_H_ - -#include - -typedef pth_t SYS_ThreadHandle; - -#endif /* _SDL_SYSTHREAD_C_H_ */ -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/timer/unix/SDL_systimer.c b/src/timer/unix/SDL_systimer.c index 3366dbd77..53d3197ba 100644 --- a/src/timer/unix/SDL_systimer.c +++ b/src/timer/unix/SDL_systimer.c @@ -42,10 +42,6 @@ #include #endif -#if SDL_THREAD_PTH -#include -#endif - #if SDL_THREADS_DISABLED #define USE_ITIMER #endif @@ -94,12 +90,6 @@ SDL_GetTicks(void) void SDL_Delay(Uint32 ms) { -#if SDL_THREAD_PTH - pth_time_t tv; - tv.tv_sec = ms / 1000; - tv.tv_usec = (ms % 1000) * 1000; - pth_nap(tv); -#else int was_error; #if HAVE_NANOSLEEP @@ -138,7 +128,6 @@ SDL_Delay(Uint32 ms) was_error = select(0, NULL, NULL, NULL, &tv); #endif /* HAVE_NANOSLEEP */ } while (was_error && (errno == EINTR)); -#endif /* SDL_THREAD_PTH */ } #ifdef USE_ITIMER