merge from open-source master
Change-Id: Ice679e12b8393621b21a8dafe640dd880a09d35e
This commit is contained in:
commit
02565fec82
|
@ -5,6 +5,7 @@
|
|||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* here's how these things work.
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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",
|
||||
|
@ -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…
Reference in New Issue