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

Commit d15e6ac9 authored by Mike Lockwood's avatar Mike Lockwood
Browse files

adb: kick the transport after sending the "adb root" command



This is needed because the USB driver on the device no longer resets the bus
when exits and restarts.
Since the host side adb no longer detects that adbd has restarted we need
to reset the connection on the host side now.

Change-Id: I1a8eabd292e8b45c34fa07a8a8b8c609cc15648d
Signed-off-by: default avatarMike Lockwood <lockwood@android.com>
parent 21a6c1c0
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -86,6 +86,12 @@ struct asocket {
        */
    int    closing;

        /* flag: kick the transport when the socket is closed.
        ** This is needed to handle commands that cause the
        ** remote daemon to terminate, like "adb root"
        */
    int    kick_on_close;

        /* the asocket we are connected to
        */

+16 −0
Original line number Diff line number Diff line
@@ -190,6 +190,14 @@ static void local_socket_ready(asocket *s)

static void local_socket_close(asocket *s)
{
#if ADB_HOST
    /* to special case commands that cause the remote daemon to terminate */
    if (s->kick_on_close && s->transport) {
        kick_transport(s->transport);
        /* delay to work around a race condition */
        sleep(1);
    }
#endif
    adb_mutex_lock(&socket_list_lock);
    local_socket_close_locked(s);
    adb_mutex_unlock(&socket_list_lock);
@@ -524,6 +532,14 @@ void connect_to_remote(asocket *s, const char *destination)
    apacket *p = get_apacket();
    int len = strlen(destination) + 1;

#if ADB_HOST
    /* special case commands that cause the remote daemon to terminate */
    if (!strcmp(destination, "root:")) {
        D("connect_to_remote setting kick_on_close for %s\n", destination);
        s->kick_on_close = 1;
    }
#endif

    if(len > (MAX_PAYLOAD-1)) {
        fatal("destination oversized");
    }