Skip to content
Snippets Groups Projects
Commit 75f42d7e authored by Elliott Hughes's avatar Elliott Hughes
Browse files

Allow multiple (sequential) adb users on Linux.

Before this, adb will fail to start for the second user who tries because
/tmp/adb.log already exists and isn't writable by the second user.

Also allow $TMPDIR to override the use of /tmp.

Bug: http://b/29201686
Bug: https://code.google.com/p/android/issues/detail?id=211420

(cherry picked from commit d89a6c22)

Change-Id: Ibb1369e8043feb9774593e317dcd7bb93323fd89
parent eacbb824
No related branches found
No related tags found
No related merge requests found
...@@ -23,11 +23,6 @@ ...@@ -23,11 +23,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
// We only build the affinity WAR code for Linux.
#if defined(__linux__)
#include <sched.h>
#endif
#include <android-base/errors.h> #include <android-base/errors.h>
#include <android-base/file.h> #include <android-base/file.h>
#include <android-base/logging.h> #include <android-base/logging.h>
...@@ -39,21 +34,14 @@ ...@@ -39,21 +34,14 @@
#include "adb_utils.h" #include "adb_utils.h"
#include "transport.h" #include "transport.h"
#if defined(_WIN32)
static BOOL WINAPI ctrlc_handler(DWORD type) {
// TODO: Consider trying to kill a starting up adb server (if we're in
// launch_server) by calling GenerateConsoleCtrlEvent().
exit(STATUS_CONTROL_C_EXIT);
return TRUE;
}
static std::string GetLogFilePath() { static std::string GetLogFilePath() {
#if defined(_WIN32)
const char log_name[] = "adb.log"; const char log_name[] = "adb.log";
WCHAR temp_path[MAX_PATH]; WCHAR temp_path[MAX_PATH];
// https://msdn.microsoft.com/en-us/library/windows/desktop/aa364992%28v=vs.85%29.aspx // https://msdn.microsoft.com/en-us/library/windows/desktop/aa364992%28v=vs.85%29.aspx
DWORD nchars = GetTempPathW(arraysize(temp_path), temp_path); DWORD nchars = GetTempPathW(arraysize(temp_path), temp_path);
if ((nchars >= arraysize(temp_path)) || (nchars == 0)) { if (nchars >= arraysize(temp_path) || nchars == 0) {
// If string truncation or some other error. // If string truncation or some other error.
fatal("cannot retrieve temporary file path: %s\n", fatal("cannot retrieve temporary file path: %s\n",
android::base::SystemErrorCodeToString(GetLastError()).c_str()); android::base::SystemErrorCodeToString(GetLastError()).c_str());
...@@ -65,12 +53,12 @@ static std::string GetLogFilePath() { ...@@ -65,12 +53,12 @@ static std::string GetLogFilePath() {
} }
return temp_path_utf8 + log_name; return temp_path_utf8 + log_name;
}
#else #else
static std::string GetLogFilePath() { const char* tmp_dir = getenv("TMPDIR");
return std::string("/tmp/adb.log"); if (tmp_dir == nullptr) tmp_dir = "/tmp";
} return android::base::StringPrintf("%s/adb.%u.log", tmp_dir, getuid());
#endif #endif
}
static void setup_daemon_logging(void) { static void setup_daemon_logging(void) {
const std::string log_file_path(GetLogFilePath()); const std::string log_file_path(GetLogFilePath());
...@@ -90,6 +78,15 @@ static void setup_daemon_logging(void) { ...@@ -90,6 +78,15 @@ static void setup_daemon_logging(void) {
LOG(INFO) << adb_version(); LOG(INFO) << adb_version();
} }
#if defined(_WIN32)
static BOOL WINAPI ctrlc_handler(DWORD type) {
// TODO: Consider trying to kill a starting up adb server (if we're in
// launch_server) by calling GenerateConsoleCtrlEvent().
exit(STATUS_CONTROL_C_EXIT);
return TRUE;
}
#endif
int adb_server_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) #if defined(_WIN32)
// adb start-server starts us up with stdout and stderr hooked up to // adb start-server starts us up with stdout and stderr hooked up to
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment