mirror of https://github.com/BOINC/boinc.git
Mac: FIx screensaver coordinator to run properly under Mac OS 11 Big Sur
This commit is contained in:
parent
bab861df05
commit
3e18fc3b20
|
@ -173,7 +173,7 @@ int main(int argc, char** argv) {
|
||||||
return errno;
|
return errno;
|
||||||
} else { // if screensaverLoginUser
|
} else { // if screensaverLoginUser
|
||||||
#if VERBOSE // For debugging only
|
#if VERBOSE // For debugging only
|
||||||
print_to_log_file("gfx_switcher using fork()");;
|
print_to_log_file("gfx_switcher using fork()");
|
||||||
#endif
|
#endif
|
||||||
int pid = fork();
|
int pid = fork();
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
|
@ -182,10 +182,16 @@ int main(int argc, char** argv) {
|
||||||
// full path twice in the argument list to execv.
|
// full path twice in the argument list to execv.
|
||||||
execv(resolved_path, argv+2);
|
execv(resolved_path, argv+2);
|
||||||
// If we got here execv failed
|
// If we got here execv failed
|
||||||
|
#if VERBOSE // For debugging only
|
||||||
|
print_to_log_file("gfx_switcher: Process creation (%s) failed: errno=%d\n", resolved_path, errno);
|
||||||
|
#endif
|
||||||
fprintf(stderr, "Process creation (%s) failed: errno=%d\n", resolved_path, errno);
|
fprintf(stderr, "Process creation (%s) failed: errno=%d\n", resolved_path, errno);
|
||||||
return errno;
|
return errno;
|
||||||
} else {
|
} else {
|
||||||
char shmem_name[MAXPATHLEN];
|
char shmem_name[MAXPATHLEN];
|
||||||
|
#if VERBOSE // For debugging only
|
||||||
|
print_to_log_file("gfx_switcher: Child PID=%d", pid);
|
||||||
|
#endif
|
||||||
snprintf(shmem_name, sizeof(shmem_name), "/tmp/boinc_ss_%s", screensaverLoginUser);
|
snprintf(shmem_name, sizeof(shmem_name), "/tmp/boinc_ss_%s", screensaverLoginUser);
|
||||||
retval = attach_shmem_mmap(shmem_name, (void**)&pid_for_shmem);
|
retval = attach_shmem_mmap(shmem_name, (void**)&pid_for_shmem);
|
||||||
if (pid_for_shmem != 0) {
|
if (pid_for_shmem != 0) {
|
||||||
|
@ -280,10 +286,24 @@ void * MonitorScreenSaverEngine(void* param) {
|
||||||
while (true) {
|
while (true) {
|
||||||
boinc_sleep(1.0); // Test every second
|
boinc_sleep(1.0); // Test every second
|
||||||
ScreenSaverEngine_Pid = getPidIfRunning("com.apple.ScreenSaver.Engine");
|
ScreenSaverEngine_Pid = getPidIfRunning("com.apple.ScreenSaver.Engine");
|
||||||
if (ScreenSaverEngine_Pid == 0) {
|
|
||||||
kill(graphics_Pid, SIGKILL);
|
|
||||||
#if VERBOSE // For debugging only
|
#if VERBOSE // For debugging only
|
||||||
print_to_log_file("MonitorScreenSaverEngine calling kill(%d, SIGKILL", graphics_Pid);
|
print_to_log_file("MonitorScreenSaverEngine: ScreenSaverEngine_Pid=%d", ScreenSaverEngine_Pid);
|
||||||
|
#endif
|
||||||
|
if (ScreenSaverEngine_Pid == 0) {
|
||||||
|
#ifdef __x86_64__
|
||||||
|
ScreenSaverEngine_Pid = getPidIfRunning("com.apple.ScreenSaver.Engine.legacyScreenSaver.x86_64");
|
||||||
|
#elif defined(__arm64__)
|
||||||
|
ScreenSaverEngine_Pid = getPidIfRunning("com.apple.ScreenSaver.Engine.legacyScreenSaver.arm64");
|
||||||
|
#endif
|
||||||
|
#if VERBOSE // For debugging only
|
||||||
|
print_to_log_file("MonitorScreenSaverEngine: ScreenSaverEngine_legacyScreenSaver_Pid=%d", ScreenSaverEngine_Pid);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ScreenSaverEngine_Pid == 0) {
|
||||||
|
kill(graphics_Pid, SIGKILL);
|
||||||
|
#if VERBOSE // For debugging only
|
||||||
|
print_to_log_file("MonitorScreenSaverEngine calling kill(%d, SIGKILL", graphics_Pid);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
#define VERBOSE 0
|
||||||
|
|
||||||
#include <Carbon/Carbon.h>
|
#include <Carbon/Carbon.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <app_ipc.h>
|
#include <app_ipc.h>
|
||||||
|
@ -49,6 +51,17 @@ extern pthread_mutex_t saver_mutex;
|
||||||
#include "str_replace.h"
|
#include "str_replace.h"
|
||||||
#include "screensaver.h"
|
#include "screensaver.h"
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#undef BOINCTRACE
|
||||||
|
#if VERBOSE
|
||||||
|
#define BOINCTRACE print_to_log_file
|
||||||
|
#else
|
||||||
|
#define BOINCTRACE(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _T
|
||||||
|
#endif
|
||||||
|
|
||||||
// Platform specific application includes
|
// Platform specific application includes
|
||||||
//
|
//
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
|
|
Loading…
Reference in New Issue