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

Commit 448aed3c authored by Josh Gao's avatar Josh Gao Committed by android-build-merger
Browse files

Merge changes I80af5f4b,I2fd0034e am: 2decb2fc

am: c9a893c1

Change-Id: I7226d6078ecbd07f4bfcd9471e2ef25b0c7913b1
parents 53c3f30d c9a893c1
Loading
Loading
Loading
Loading
+23 −7
Original line number Diff line number Diff line
@@ -267,7 +267,7 @@ struct UsbFfsConnection : public Connection {
            adb_thread_setname("UsbFfs-monitor");

            bool bound = false;
            bool started = false;
            bool enabled = false;
            bool running = true;
            while (running) {
                adb_pollfd pfd[2] = {
@@ -298,16 +298,32 @@ struct UsbFfsConnection : public Connection {
                switch (event.type) {
                    case FUNCTIONFS_BIND:
                        CHECK(!bound) << "received FUNCTIONFS_BIND while already bound?";
                        CHECK(!enabled) << "received FUNCTIONFS_BIND while already enabled?";
                        bound = true;

                        break;

                    case FUNCTIONFS_ENABLE:
                        CHECK(!started) << "received FUNCTIONFS_ENABLE while already running?";
                        started = true;
                        CHECK(bound) << "received FUNCTIONFS_ENABLE while not bound?";
                        CHECK(!enabled) << "received FUNCTIONFS_ENABLE while already enabled?";
                        enabled = true;

                        StartWorker();
                        break;

                    case FUNCTIONFS_DISABLE:
                        CHECK(bound) << "received FUNCTIONFS_DISABLE while not bound?";
                        CHECK(enabled) << "received FUNCTIONFS_DISABLE while not enabled?";
                        enabled = false;

                        running = false;
                        break;

                    case FUNCTIONFS_UNBIND:
                        CHECK(!enabled) << "received FUNCTIONFS_UNBIND while still enabled?";
                        CHECK(bound) << "received FUNCTIONFS_UNBIND when not bound?";
                        bound = false;

                        running = false;
                        break;
                }
@@ -339,7 +355,7 @@ struct UsbFfsConnection : public Connection {
                    LOG(FATAL) << "hit EOF on eventfd";
                }

                WaitForEvents();
                ReadEvents();
            }
        });
    }
@@ -389,7 +405,7 @@ struct UsbFfsConnection : public Connection {
        return block;
    }

    void WaitForEvents() {
    void ReadEvents() {
        static constexpr size_t kMaxEvents = kUsbReadQueueDepth + kUsbWriteQueueDepth;
        struct io_event events[kMaxEvents];
        struct timespec timeout = {.tv_sec = 0, .tv_nsec = 0};
@@ -552,6 +568,8 @@ struct UsbFfsConnection : public Connection {
            LOG(VERBOSE) << "submitting write_request " << static_cast<void*>(iocbs[i]);
        }

        writes_submitted_ += writes_to_submit;

        int rc = io_submit(aio_context_.get(), writes_to_submit, iocbs);
        if (rc == -1) {
            HandleError(StringPrintf("failed to submit write requests: %s", strerror(errno)));
@@ -560,8 +578,6 @@ struct UsbFfsConnection : public Connection {
            LOG(FATAL) << "failed to submit all writes: wanted to submit " << writes_to_submit
                       << ", actually submitted " << rc;
        }

        writes_submitted_ += rc;
    }

    void HandleError(const std::string& error) {