Merge "adb: Don't synchronize with transport using sleep"

This commit is contained in:
Benoit Goby 2012-03-26 12:56:56 -07:00 committed by Android (Google) Code Review
commit 4d668e013b
3 changed files with 19 additions and 13 deletions

View file

@ -86,6 +86,11 @@ struct asocket {
*/
int closing;
/* flag: quit adbd when both ends close the
** local service socket
*/
int exit_on_close;
/* the asocket we are connected to
*/

View file

@ -129,10 +129,6 @@ void restart_root_service(int fd, void *cookie)
snprintf(buf, sizeof(buf), "restarting adbd as root\n");
writex(fd, buf, strlen(buf));
adb_close(fd);
// quit, and init will restart us as root
sleep(1);
exit(1);
}
}
@ -154,10 +150,6 @@ void restart_tcp_service(int fd, void *cookie)
snprintf(buf, sizeof(buf), "restarting in TCP mode port: %d\n", port);
writex(fd, buf, strlen(buf));
adb_close(fd);
// quit, and init will restart us in TCP mode
sleep(1);
exit(1);
}
void restart_usb_service(int fd, void *cookie)
@ -168,10 +160,6 @@ void restart_usb_service(int fd, void *cookie)
snprintf(buf, sizeof(buf), "restarting in USB mode\n");
writex(fd, buf, strlen(buf));
adb_close(fd);
// quit, and init will restart us in USB mode
sleep(1);
exit(1);
}
void reboot_service(int fd, void *arg)
@ -371,7 +359,6 @@ static void subproc_waiter_service(int fd, void *cookie)
break;
}
}
usleep(100000); // poll every 0.1 sec
}
D("shell exited fd=%d of pid=%d err=%d\n", fd, pid, errno);
if (SHELL_EXIT_NOTIFY_FD >=0) {

View file

@ -199,6 +199,8 @@ static void local_socket_close(asocket *s)
static void local_socket_destroy(asocket *s)
{
apacket *p, *n;
int exit_on_close = s->exit_on_close;
D("LS(%d): destroying fde.fd=%d\n", s->id, s->fde.fd);
/* IMPORTANT: the remove closes the fd
@ -214,6 +216,11 @@ static void local_socket_destroy(asocket *s)
}
remove_socket(s);
free(s);
if (exit_on_close) {
D("local_socket_destroy: exiting\n");
exit(1);
}
}
@ -418,6 +425,13 @@ asocket *create_local_service_socket(const char *name)
s = create_local_socket(fd);
D("LS(%d): bound to '%s' via %d\n", s->id, name, fd);
if (!strcmp(name, "root:") || !strcmp(name, "usb:") ||
!strcmp(name, "tcpip:")) {
D("LS(%d): enabling exit_on_close\n", s->id);
s->exit_on_close = 1;
}
return s;
}