diff --git a/adb/adb.h b/adb/adb.h index 971b8da41ecd9dd01ef07af8b3aed924fe3ef41f..b1d9896432a417d9edf1ec3e37870451673be3aa 100644 --- a/adb/adb.h +++ b/adb/adb.h @@ -160,8 +160,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 4f3e1f51b3afb7b285ffaa3d386f54b2cb5f4f4e..1f5a258c175d6c6578ea8162b72beed37eea58e3 100644 --- a/adb/transport_local.cpp +++ b/adb/transport_local.cpp @@ -99,7 +99,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; } @@ -116,7 +117,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; } @@ -360,6 +361,11 @@ 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) { adb_mutex_lock( &local_transports_lock ); @@ -368,6 +374,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() {