Merge "Avoid SIGPIPE in adb."

This commit is contained in:
Elliott Hughes 2015-11-20 20:18:01 +00:00 committed by Gerrit Code Review
commit 8c5511c692
3 changed files with 10 additions and 8 deletions

View file

@ -151,7 +151,7 @@ void handle_packet(apacket *p, atransport *t);
void get_my_path(char *s, size_t maxLen);
int launch_server(int server_port);
int adb_main(int is_daemon, int server_port, int ack_reply_fd);
int adb_server_main(int is_daemon, int server_port, int ack_reply_fd);
/* initialize a transport object's func pointers and state */
#if ADB_HOST

View file

@ -86,8 +86,7 @@ static void close_stdin() {
static void setup_daemon_logging(void) {
const std::string log_file_path(GetLogFilePath());
int fd = unix_open(log_file_path.c_str(), O_WRONLY | O_CREAT | O_APPEND,
0640);
int fd = unix_open(log_file_path.c_str(), O_WRONLY | O_CREAT | O_APPEND, 0640);
if (fd == -1) {
fatal("cannot open '%s': %s", log_file_path.c_str(), strerror(errno));
}
@ -103,10 +102,10 @@ static void setup_daemon_logging(void) {
LOG(INFO) << adb_version();
}
int adb_main(int is_daemon, int server_port, int ack_reply_fd) {
int adb_server_main(int is_daemon, int server_port, int ack_reply_fd) {
#if defined(_WIN32)
// adb start-server starts us up with stdout and stderr hooked up to
// anonymous pipes to. When the C Runtime sees this, it makes stderr and
// anonymous pipes. When the C Runtime sees this, it makes stderr and
// stdout buffered, but to improve the chance that error output is seen,
// unbuffer stdout and stderr just like if we were run at the console.
// This also keeps stderr unbuffered when it is redirected to adb.log.
@ -120,8 +119,6 @@ int adb_main(int is_daemon, int server_port, int ack_reply_fd) {
}
SetConsoleCtrlHandler(ctrlc_handler, TRUE);
#else
signal(SIGPIPE, SIG_IGN);
#endif
init_transport_registration();

View file

@ -1296,6 +1296,11 @@ int adb_commandline(int argc, const char **argv) {
TransportType transport_type = kTransportAny;
int ack_reply_fd = -1;
#if !defined(_WIN32)
// We'd rather have EPIPE than SIGPIPE.
signal(SIGPIPE, SIG_IGN);
#endif
// If defined, this should be an absolute path to
// the directory containing all of the various system images
// for a particular product. If not defined, and the adb
@ -1427,7 +1432,7 @@ int adb_commandline(int argc, const char **argv) {
fprintf(stderr, "reply fd for adb server to client communication not specified.\n");
return usage();
}
r = adb_main(is_daemon, server_port, ack_reply_fd);
r = adb_server_main(is_daemon, server_port, ack_reply_fd);
} else {
r = launch_server(server_port);
}