XQuartz: Use dispatch_async to handoff the FD
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
This commit is contained in:
parent
ca7b9e6c81
commit
034538ea9b
|
@ -40,10 +40,15 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <pthread.h>
|
||||
#include <stdbool.h>
|
||||
#include <signal.h>
|
||||
|
||||
#ifdef HAVE_LIBDISPATCH
|
||||
#include <dispatch/dispatch.h>
|
||||
#else
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
|
@ -94,6 +99,7 @@ int server_main(int argc, char **argv, char **envp);
|
|||
static int execute(const char *command);
|
||||
static char *command_from_prefs(const char *key, const char *default_value);
|
||||
|
||||
#ifndef HAVE_LIBDISPATCH
|
||||
/*** Pthread Magics ***/
|
||||
static pthread_t create_thread(void *(*func)(void *), void *arg) {
|
||||
pthread_attr_t attr;
|
||||
|
@ -107,6 +113,7 @@ static pthread_t create_thread(void *(*func)(void *), void *arg) {
|
|||
|
||||
return tid;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*** Mach-O IPC Stuffs ***/
|
||||
|
||||
|
@ -199,8 +206,13 @@ typedef struct {
|
|||
/* This thread accepts an incoming connection and hands off the file
|
||||
* descriptor for the new connection to accept_fd_handoff()
|
||||
*/
|
||||
#ifdef HAVE_LIBDISPATCH
|
||||
static void socket_handoff(socket_handoff_t *handoff_data) {
|
||||
#else
|
||||
static void *socket_handoff_thread(void *arg) {
|
||||
socket_handoff_t *handoff_data = (socket_handoff_t *)arg;
|
||||
#endif
|
||||
|
||||
int launchd_fd = -1;
|
||||
int connected_fd;
|
||||
|
||||
|
@ -229,7 +241,9 @@ static void *socket_handoff_thread(void *arg) {
|
|||
fprintf(stderr, "X11.app Handing off fd to server thread via DarwinListenOnOpenFD(%d)\n", launchd_fd);
|
||||
DarwinListenOnOpenFD(launchd_fd);
|
||||
|
||||
#ifndef HAVE_LIBDISPATCH
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int create_socket(char *filename_out) {
|
||||
|
@ -298,8 +312,14 @@ kern_return_t do_request_fd_handoff_socket(mach_port_t port, string_t filename)
|
|||
}
|
||||
|
||||
strlcpy(filename, handoff_data->filename, STRING_T_SIZE);
|
||||
|
||||
|
||||
#ifdef HAVE_LIBDISPATCH
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
|
||||
socket_handoff(handoff_data);
|
||||
});
|
||||
#else
|
||||
create_thread(socket_handoff_thread, handoff_data);
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "X11.app: Thread created for handoff. Returning success to tell caller to connect and push the fd.\n");
|
||||
|
|
Loading…
Reference in New Issue