diff --git a/adb/transport.cpp b/adb/transport.cpp index 922200826..3c74c7591 100644 --- a/adb/transport.cpp +++ b/adb/transport.cpp @@ -1190,17 +1190,11 @@ void close_usb_devices() { } #endif // ADB_HOST -int register_socket_transport(unique_fd s, const char* serial, int port, int local, +int register_socket_transport(unique_fd s, std::string serial, int port, int local, atransport::ReconnectCallback reconnect) { atransport* t = new atransport(std::move(reconnect), kCsOffline); - if (!serial) { - char buf[32]; - snprintf(buf, sizeof(buf), "T-%p", t); - serial = buf; - } - - D("transport: %s init'ing for socket %d, on port %d", serial, s.get(), port); + D("transport: %s init'ing for socket %d, on port %d", serial.c_str(), s.get(), port); if (init_socket_transport(t, std::move(s), port, local) < 0) { delete t; return -1; @@ -1208,7 +1202,7 @@ int register_socket_transport(unique_fd s, const char* serial, int port, int loc std::unique_lock lock(transport_lock); for (const auto& transport : pending_list) { - if (strcmp(serial, transport->serial.c_str()) == 0) { + if (serial == transport->serial) { VLOG(TRANSPORT) << "socket transport " << transport->serial << " is already in pending_list and fails to register"; delete t; @@ -1217,7 +1211,7 @@ int register_socket_transport(unique_fd s, const char* serial, int port, int loc } for (const auto& transport : transport_list) { - if (strcmp(serial, transport->serial.c_str()) == 0) { + if (serial == transport->serial) { VLOG(TRANSPORT) << "socket transport " << transport->serial << " is already in transport_list and fails to register"; delete t; @@ -1225,8 +1219,8 @@ int register_socket_transport(unique_fd s, const char* serial, int port, int loc } } + t->serial = std::move(serial); pending_list.push_front(t); - t->serial = serial; lock.unlock(); diff --git a/adb/transport.h b/adb/transport.h index 1844ae8aa..4bfc2ce2b 100644 --- a/adb/transport.h +++ b/adb/transport.h @@ -364,7 +364,7 @@ void register_usb_transport(usb_handle* h, const char* serial, void connect_device(const std::string& address, std::string* response); /* cause new transports to be init'd and added to the list */ -int register_socket_transport(unique_fd s, const char* serial, int port, int local, +int register_socket_transport(unique_fd s, std::string serial, int port, int local, atransport::ReconnectCallback reconnect); // This should only be used for transports with connection_state == kCsNoPerm. diff --git a/adb/transport_local.cpp b/adb/transport_local.cpp index 9398cebe8..3b1552e3a 100644 --- a/adb/transport_local.cpp +++ b/adb/transport_local.cpp @@ -125,8 +125,7 @@ void connect_device(const std::string& address, std::string* response) { return init_socket_transport(t, std::move(fd), port, 0) >= 0; }; - int ret = - register_socket_transport(std::move(fd), serial.c_str(), port, 0, std::move(reconnect)); + int ret = register_socket_transport(std::move(fd), serial, port, 0, std::move(reconnect)); if (ret < 0) { if (ret == -EALREADY) { *response = android::base::StringPrintf("already connected to %s", serial.c_str()); @@ -162,7 +161,7 @@ int local_connect_arbitrary_ports(int console_port, int adb_port, std::string* e close_on_exec(fd.get()); disable_tcp_nagle(fd.get()); std::string serial = getEmulatorSerialString(console_port); - if (register_socket_transport(std::move(fd), serial.c_str(), adb_port, 1, + if (register_socket_transport(std::move(fd), std::move(serial), adb_port, 1, [](atransport*) { return false; }) == 0) { return 0; } @@ -265,7 +264,7 @@ static void server_socket_thread(int port) { close_on_exec(fd.get()); disable_tcp_nagle(fd.get()); std::string serial = android::base::StringPrintf("host-%d", fd.get()); - register_socket_transport(std::move(fd), serial.c_str(), port, 1, + register_socket_transport(std::move(fd), std::move(serial), port, 1, [](atransport*) { return false; }); } } @@ -362,7 +361,7 @@ static void qemu_socket_thread(int port) { * exchange. */ std::string serial = android::base::StringPrintf("host-%d", fd.get()); WriteFdExactly(fd.get(), _start_req, strlen(_start_req)); - register_socket_transport(std::move(fd), serial.c_str(), port, 1, + register_socket_transport(std::move(fd), std::move(serial), port, 1, [](atransport*) { return false; }); }