XQuartz: Fixed a few issues with fd passing... still not working =(

(cherry picked from commit 7dd3512715)
This commit is contained in:
Jeremy Huddleston 2008-05-19 03:13:09 -07:00
parent 86bfcd8d78
commit 517151d5f4
2 changed files with 14 additions and 15 deletions

View File

@ -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) {

View File

@ -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);
}