diff --git a/adb/adb.h b/adb/adb.h index 2797f6b54..df59aaaa9 100644 --- a/adb/adb.h +++ b/adb/adb.h @@ -139,8 +139,10 @@ int get_available_local_transport_index(); int init_socket_transport(atransport *t, int s, int port, int local); void init_usb_transport(atransport *t, usb_handle *usb, ConnectionState state); +std::string getEmulatorSerialString(int console_port); #if ADB_HOST atransport* find_emulator_transport_by_adb_port(int adb_port); +atransport* find_emulator_transport_by_console_port(int console_port); #endif int service_to_fd(const char* name, const atransport* transport); diff --git a/adb/transport_local.cpp b/adb/transport_local.cpp index a94b41efa..ea2bf7747 100644 --- a/adb/transport_local.cpp +++ b/adb/transport_local.cpp @@ -103,7 +103,8 @@ int local_connect_arbitrary_ports(int console_port, int adb_port, std::string* e int fd = -1; #if ADB_HOST - if (find_emulator_transport_by_adb_port(adb_port) != nullptr) { + if (find_emulator_transport_by_adb_port(adb_port) != nullptr || + find_emulator_transport_by_console_port(console_port) != nullptr) { return -1; } @@ -120,7 +121,7 @@ int local_connect_arbitrary_ports(int console_port, int adb_port, std::string* e D("client: connected on remote on fd %d", fd); close_on_exec(fd); disable_tcp_nagle(fd); - std::string serial = android::base::StringPrintf("emulator-%d", console_port); + std::string serial = getEmulatorSerialString(console_port); if (register_socket_transport(fd, serial.c_str(), adb_port, 1) == 0) { return 0; } @@ -431,6 +432,11 @@ static atransport* find_emulator_transport_by_adb_port_locked(int adb_port) return NULL; } +std::string getEmulatorSerialString(int console_port) +{ + return android::base::StringPrintf("emulator-%d", console_port); +} + atransport* find_emulator_transport_by_adb_port(int adb_port) { std::lock_guard lock(local_transports_lock); @@ -438,6 +444,12 @@ atransport* find_emulator_transport_by_adb_port(int adb_port) return result; } +atransport* find_emulator_transport_by_console_port(int console_port) +{ + return find_transport(getEmulatorSerialString(console_port).c_str()); +} + + /* Only call this function if you already hold local_transports_lock. */ int get_available_local_transport_index_locked() {