XQuartz: Use a lighter spinlock instead of a pthread_mutex_t in QuartzScreenSaver
Currently, we only end up here through a call to QuartzShowFullscreen, and this is always on the same thread. Future changes (such as further incorporating libdispatch) may allow this to change, but contention will remain minimal since the call is infrequent and it is short held. Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> Reviewed-by: Daniel A. Steffen <dsteffen@apple.com>
This commit is contained in:
parent
3e253c603b
commit
1596ea72d6
|
@ -62,7 +62,7 @@
|
|||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <IOKit/pwr_mgt/IOPMLib.h>
|
||||
#include <pthread.h>
|
||||
#include <libkern/OSAtomic.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include <rootlessCommon.h>
|
||||
|
@ -279,9 +279,9 @@ static void pokeActivityCallback(CFRunLoopTimerRef timer, void *info) {
|
|||
static void QuartzScreenSaver(int state) {
|
||||
static CFRunLoopTimerRef pokeActivityTimer = NULL;
|
||||
static CFRunLoopTimerContext pokeActivityContext = { 0, NULL, NULL, NULL, NULL };
|
||||
static pthread_mutex_t pokeActivityMutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
static OSSpinLock pokeActivitySpinLock = OS_SPINLOCK_INIT;
|
||||
|
||||
pthread_mutex_lock(&pokeActivityMutex);
|
||||
OSSpinLockLock(&pokeActivitySpinLock);
|
||||
|
||||
if(state) {
|
||||
if(pokeActivityTimer == NULL)
|
||||
|
@ -303,7 +303,7 @@ static void QuartzScreenSaver(int state) {
|
|||
CFRunLoopAddTimer(CFRunLoopGetMain(), pokeActivityTimer, kCFRunLoopCommonModes);
|
||||
}
|
||||
QuartzScreenSaverEnd:
|
||||
pthread_mutex_unlock(&pokeActivityMutex);
|
||||
OSSpinLockUnlock(&pokeActivitySpinLock);
|
||||
}
|
||||
|
||||
void QuartzShowFullscreen(int state) {
|
||||
|
|
Loading…
Reference in New Issue