XQuartz: Fixed a few issues with fd passing... still not working =(
(cherry picked from commit 7dd3512715
)
This commit is contained in:
parent
86bfcd8d78
commit
517151d5f4
@ -163,10 +163,11 @@ static void accept_fd_handoff(int connected_fd) {
|
||||
|
||||
launchd_fd = *((int*)CMSG_DATA(cmsg));
|
||||
|
||||
if(launchd_fd > 0)
|
||||
DarwinListenOnOpenFD(launchd_fd);
|
||||
else
|
||||
if(launchd_fd == -1)
|
||||
fprintf(stderr, "Error receiving $DISPLAY file descriptor, no descriptor received? %d\n", launchd_fd);
|
||||
|
||||
fprintf(stderr, "Received new DISPLAY fd: %d\n", launchd_fd);
|
||||
DarwinListenOnOpenFD(launchd_fd);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
@ -227,9 +228,6 @@ static void socket_handoff_thread(void *arg) {
|
||||
|
||||
connected_fd = accept(handoff_fd, NULL, NULL);
|
||||
|
||||
/* We delete this temporary socket after we get the connection */
|
||||
unlink(filename);
|
||||
|
||||
if(connected_fd == -1) {
|
||||
fprintf(stderr, "Failed to accept incoming connection on socket: %s - %s\n", filename, strerror(errno));
|
||||
return;
|
||||
@ -237,8 +235,10 @@ static void socket_handoff_thread(void *arg) {
|
||||
|
||||
/* Now actually get the passed file descriptor from this connection */
|
||||
accept_fd_handoff(connected_fd);
|
||||
|
||||
|
||||
close(connected_fd);
|
||||
close(handoff_fd);
|
||||
unlink(filename);
|
||||
}
|
||||
|
||||
kern_return_t do_prep_fd_handoff(mach_port_t port, string_t socket_filename) {
|
||||
|
@ -113,7 +113,7 @@ static void set_x11_path() {
|
||||
}
|
||||
}
|
||||
|
||||
static void send_fd_handoff(int connected_fd, int launchd_fd) {
|
||||
static void send_fd_handoff(int handoff_fd, int launchd_fd) {
|
||||
char databuf[] = "display";
|
||||
struct iovec iov[1];
|
||||
|
||||
@ -143,19 +143,19 @@ static void send_fd_handoff(int connected_fd, int launchd_fd) {
|
||||
|
||||
*((int*)CMSG_DATA(cmsg)) = launchd_fd;
|
||||
|
||||
if (sendmsg(connected_fd, &msg, 0) < 0) {
|
||||
if (sendmsg(handoff_fd, &msg, 0) < 0) {
|
||||
fprintf(stderr, "Error sending $DISPLAY file descriptor: %s\n", strerror(errno));
|
||||
return;
|
||||
}
|
||||
|
||||
fprintf(stderr, "send %d %d %d %s\n", connected_fd, launchd_fd, errno, strerror(errno));
|
||||
fprintf(stderr, "send %d %d %d %s\n", handoff_fd, launchd_fd, errno, strerror(errno));
|
||||
}
|
||||
|
||||
static void handoff_fd(const char *filename, int launchd_fd) {
|
||||
struct sockaddr_un servaddr_un;
|
||||
struct sockaddr *servaddr;
|
||||
socklen_t servaddr_len;
|
||||
int handoff_fd, connected_fd;
|
||||
int handoff_fd;
|
||||
|
||||
/* Setup servaddr_un */
|
||||
memset (&servaddr_un, 0, sizeof (struct sockaddr_un));
|
||||
@ -171,15 +171,14 @@ static void handoff_fd(const char *filename, int launchd_fd) {
|
||||
return;
|
||||
}
|
||||
|
||||
connected_fd = connect(handoff_fd, servaddr, servaddr_len);
|
||||
|
||||
if(connected_fd == -1) {
|
||||
if(connect(handoff_fd, servaddr, servaddr_len) < 0) {
|
||||
fprintf(stderr, "Failed to establish connection on socket: %s - %s\n", filename, strerror(errno));
|
||||
return;
|
||||
}
|
||||
|
||||
send_fd_handoff(connected_fd, launchd_fd);
|
||||
fprintf(stderr, "Socket: %s\n", filename);
|
||||
|
||||
send_fd_handoff(handoff_fd, launchd_fd);
|
||||
close(handoff_fd);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user