summaryrefslogtreecommitdiff
path: root/src/haptic
diff options
context:
space:
mode:
authorRyan C. Gordon <icculus@icculus.org>2016-01-03 06:50:50 -0500
committerRyan C. Gordon <icculus@icculus.org>2016-01-03 06:50:50 -0500
commit0e7135739acbda010fa73e3d511aeece56cb111c (patch)
treed33e6a39b396db2247301f3139cdcdf43ab59361 /src/haptic
parentda5fb591ce827ff8c68db0ba3ca956afa072f47f (diff)
Remove almost all instances of "volatile" keyword.
As Tiffany pointed out in Bugzilla, volatile is not useful for thread safety: https://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming/ Some of these volatiles didn't need to be, some were otherwise protected by spinlocks or mutexes, and some got moved over to SDL_atomic_t data, etc. Fixes Bugzilla #3220.
Diffstat (limited to 'src/haptic')
-rw-r--r--src/haptic/windows/SDL_windowshaptic.c2
-rw-r--r--src/haptic/windows/SDL_windowshaptic_c.h4
-rw-r--r--src/haptic/windows/SDL_xinputhaptic.c4
3 files changed, 5 insertions, 5 deletions
diff --git a/src/haptic/windows/SDL_windowshaptic.c b/src/haptic/windows/SDL_windowshaptic.c
index 0c038fb1b9..c6bcba1f31 100644
--- a/src/haptic/windows/SDL_windowshaptic.c
+++ b/src/haptic/windows/SDL_windowshaptic.c
@@ -255,7 +255,7 @@ SDL_SYS_HapticQuit(void)
for (hapticitem = SDL_haptics; hapticitem; hapticitem = hapticitem->next) {
if ((hapticitem->hwdata->bXInputHaptic) && (hapticitem->hwdata->thread)) {
/* we _have_ to stop the thread before we free the XInput DLL! */
- hapticitem->hwdata->stopThread = 1;
+ SDL_AtomicSet(&hapticitem->hwdata->stopThread, 1);
SDL_WaitThread(hapticitem->hwdata->thread, NULL);
hapticitem->hwdata->thread = NULL;
}
diff --git a/src/haptic/windows/SDL_windowshaptic_c.h b/src/haptic/windows/SDL_windowshaptic_c.h
index 89fdd2cb9c..f344264420 100644
--- a/src/haptic/windows/SDL_windowshaptic_c.h
+++ b/src/haptic/windows/SDL_windowshaptic_c.h
@@ -42,8 +42,8 @@ struct haptic_hwdata
Uint8 userid; /* XInput userid index for this joystick */
SDL_Thread *thread;
SDL_mutex *mutex;
- volatile Uint32 stopTicks;
- volatile int stopThread;
+ Uint32 stopTicks;
+ SDL_atomic_t stopThread;
};
diff --git a/src/haptic/windows/SDL_xinputhaptic.c b/src/haptic/windows/SDL_xinputhaptic.c
index a46ae5f97d..aefbabbdaa 100644
--- a/src/haptic/windows/SDL_xinputhaptic.c
+++ b/src/haptic/windows/SDL_xinputhaptic.c
@@ -146,7 +146,7 @@ SDL_RunXInputHaptic(void *arg)
{
struct haptic_hwdata *hwdata = (struct haptic_hwdata *) arg;
- while (!hwdata->stopThread) {
+ while (!SDL_AtomicGet(&hwdata->stopThread)) {
SDL_Delay(50);
SDL_LockMutex(hwdata->mutex);
/* If we're currently running and need to stop... */
@@ -261,7 +261,7 @@ SDL_XINPUT_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick)
void
SDL_XINPUT_HapticClose(SDL_Haptic * haptic)
{
- haptic->hwdata->stopThread = 1;
+ SDL_AtomicSet(&haptic->hwdata->stopThread, 1);
SDL_WaitThread(haptic->hwdata->thread, NULL);
SDL_DestroyMutex(haptic->hwdata->mutex);
}