Loading adb/jdwp_service.c +26 −1 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ #include <errno.h> #include <stdio.h> #include <string.h> #include <unistd.h> /* here's how these things work. Loading Loading @@ -320,6 +321,7 @@ jdwp_process_event( int socket, unsigned events, void* _proc ) struct iovec iov; char dummy = '!'; char buffer[sizeof(struct cmsghdr) + sizeof(int)]; int flags; iov.iov_base = &dummy; iov.iov_len = 1; Loading @@ -337,10 +339,27 @@ jdwp_process_event( int socket, unsigned events, void* _proc ) cmsg->cmsg_type = SCM_RIGHTS; ((int*)CMSG_DATA(cmsg))[0] = fd; flags = fcntl(proc->socket,F_GETFL,0); if (flags == -1) { D("failed to get cntl flags for socket %d: %s\n", proc->pid, strerror(errno)); goto CloseProcess; } if (fcntl(proc->socket, F_SETFL, flags & ~O_NONBLOCK) == -1) { D("failed to remove O_NONBLOCK flag for socket %d: %s\n", proc->pid, strerror(errno)); goto CloseProcess; } for (;;) { ret = sendmsg(proc->socket, &msg, 0); if (ret >= 0) if (ret >= 0) { adb_close(fd); break; } if (errno == EINTR) continue; D("sending new file descriptor to JDWP %d failed: %s\n", Loading @@ -354,6 +373,12 @@ jdwp_process_event( int socket, unsigned events, void* _proc ) for (n = 1; n < proc->out_count; n++) proc->out_fds[n-1] = proc->out_fds[n]; if (fcntl(proc->socket, F_SETFL, flags) == -1) { D("failed to set O_NONBLOCK flag for socket %d: %s\n", proc->pid, strerror(errno)); goto CloseProcess; } if (--proc->out_count == 0) fdevent_del( proc->fde, FDE_WRITE ); } Loading Loading
adb/jdwp_service.c +26 −1 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ #include <errno.h> #include <stdio.h> #include <string.h> #include <unistd.h> /* here's how these things work. Loading Loading @@ -320,6 +321,7 @@ jdwp_process_event( int socket, unsigned events, void* _proc ) struct iovec iov; char dummy = '!'; char buffer[sizeof(struct cmsghdr) + sizeof(int)]; int flags; iov.iov_base = &dummy; iov.iov_len = 1; Loading @@ -337,10 +339,27 @@ jdwp_process_event( int socket, unsigned events, void* _proc ) cmsg->cmsg_type = SCM_RIGHTS; ((int*)CMSG_DATA(cmsg))[0] = fd; flags = fcntl(proc->socket,F_GETFL,0); if (flags == -1) { D("failed to get cntl flags for socket %d: %s\n", proc->pid, strerror(errno)); goto CloseProcess; } if (fcntl(proc->socket, F_SETFL, flags & ~O_NONBLOCK) == -1) { D("failed to remove O_NONBLOCK flag for socket %d: %s\n", proc->pid, strerror(errno)); goto CloseProcess; } for (;;) { ret = sendmsg(proc->socket, &msg, 0); if (ret >= 0) if (ret >= 0) { adb_close(fd); break; } if (errno == EINTR) continue; D("sending new file descriptor to JDWP %d failed: %s\n", Loading @@ -354,6 +373,12 @@ jdwp_process_event( int socket, unsigned events, void* _proc ) for (n = 1; n < proc->out_count; n++) proc->out_fds[n-1] = proc->out_fds[n]; if (fcntl(proc->socket, F_SETFL, flags) == -1) { D("failed to set O_NONBLOCK flag for socket %d: %s\n", proc->pid, strerror(errno)); goto CloseProcess; } if (--proc->out_count == 0) fdevent_del( proc->fde, FDE_WRITE ); } Loading