Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 389e950c authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes I784c1dcc,Ic6a06cdc,I874b10c2

* changes:
  adb: switch reconnect_queue to std::set.
  adb: add environment variables to disable usb, emulators, mdns.
  adb: minor cleanup.
parents 7bb1ae2d 8a40c8a1
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -1326,9 +1326,9 @@ static bool _use_legacy_install() {
}

int adb_commandline(int argc, const char** argv) {
    int no_daemon = 0;
    int is_daemon = 0;
    int is_server = 0;
    bool no_daemon = false;
    bool is_daemon = false;
    bool is_server = false;
    int r;
    TransportType transport_type = kTransportAny;
    int ack_reply_fd = -1;
@@ -1348,12 +1348,12 @@ int adb_commandline(int argc, const char** argv) {

    while (argc > 0) {
        if (!strcmp(argv[0],"server")) {
            is_server = 1;
            is_server = true;
        } else if (!strcmp(argv[0],"nodaemon")) {
            no_daemon = 1;
            no_daemon = true;
        } else if (!strcmp(argv[0], "fork-server")) {
            /* this is a special flag used only when the ADB client launches the ADB Server */
            is_daemon = 1;
            is_daemon = true;
        } else if (!strcmp(argv[0], "--reply-fd")) {
            if (argc < 2) return syntax_error("--reply-fd requires an argument");
            const char* reply_fd_str = argv[1];
+13 −3
Original line number Diff line number Diff line
@@ -118,10 +118,20 @@ int adb_server_main(int is_daemon, const std::string& socket_spec, int ack_reply

    init_transport_registration();
    init_reconnect_handler();

    if (!getenv("ADB_MDNS") || strcmp(getenv("ADB_MDNS"), "0") != 0) {
        init_mdns_transport_discovery();
    }

    if (!getenv("ADB_USB") || strcmp(getenv("ADB_USB"), "0") != 0) {
        usb_init();
    } else {
        adb_notify_device_scan_complete();
    }

    if (!getenv("ADB_EMU") || strcmp(getenv("ADB_EMU"), "0") != 0) {
        local_init(DEFAULT_ADB_LOCAL_TRANSPORT_PORT);
    }

    std::string error;

+13 −11
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@
#include <deque>
#include <list>
#include <mutex>
#include <queue>
#include <set>
#include <thread>

#include <android-base/logging.h>
@@ -108,9 +108,11 @@ class ReconnectHandler {
        size_t attempts_left;

        bool operator<(const ReconnectAttempt& rhs) const {
            // std::priority_queue returns the largest element first, so we want attempts that have
            // less time remaining (i.e. smaller time_points) to compare greater.
            return reconnect_time > rhs.reconnect_time;
            if (reconnect_time == rhs.reconnect_time) {
                return reinterpret_cast<uintptr_t>(transport) <
                       reinterpret_cast<uintptr_t>(rhs.transport);
            }
            return reconnect_time < rhs.reconnect_time;
        }
    };

@@ -123,7 +125,7 @@ class ReconnectHandler {
    bool running_ GUARDED_BY(reconnect_mutex_) = true;
    std::thread handler_thread_;
    std::condition_variable reconnect_cv_;
    std::priority_queue<ReconnectAttempt> reconnect_queue_ GUARDED_BY(reconnect_mutex_);
    std::set<ReconnectAttempt> reconnect_queue_ GUARDED_BY(reconnect_mutex_);

    DISALLOW_COPY_AND_ASSIGN(ReconnectHandler);
};
@@ -145,8 +147,8 @@ void ReconnectHandler::Stop() {
    // Drain the queue to free all resources.
    std::lock_guard<std::mutex> lock(reconnect_mutex_);
    while (!reconnect_queue_.empty()) {
        ReconnectAttempt attempt = reconnect_queue_.top();
        reconnect_queue_.pop();
        ReconnectAttempt attempt = *reconnect_queue_.begin();
        reconnect_queue_.erase(reconnect_queue_.begin());
        remove_transport(attempt.transport);
    }
}
@@ -176,7 +178,7 @@ void ReconnectHandler::Run() {
                //        system_clock as its clock, so we're probably hosed if the clock changes,
                //        even if we use steady_clock throughout. This problem goes away once we
                //        switch to libc++.
                reconnect_cv_.wait_until(lock, reconnect_queue_.top().reconnect_time);
                reconnect_cv_.wait_until(lock, reconnect_queue_.begin()->reconnect_time);
            } else {
                reconnect_cv_.wait(lock);
            }
@@ -187,12 +189,12 @@ void ReconnectHandler::Run() {
            // Go back to sleep in case |reconnect_cv_| woke up spuriously and we still
            // have more time to wait for the current attempt.
            auto now = std::chrono::steady_clock::now();
            if (reconnect_queue_.top().reconnect_time > now) {
            if (reconnect_queue_.begin()->reconnect_time > now) {
                continue;
            }

            attempt = reconnect_queue_.top();
            reconnect_queue_.pop();
            attempt = *reconnect_queue_.begin();
            reconnect_queue_.erase(reconnect_queue_.begin());
            if (attempt.transport->kicked()) {
                D("transport %s was kicked. giving up on it.", attempt.transport->serial.c_str());
                remove_transport(attempt.transport);