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

Commit 9cbe4dad authored by Lloyd Pique's avatar Lloyd Pique
Browse files

SF: Fix an EventThread deadlock

EventThread::removeDisplayEventConnection tried to acquire the mutex,
however the caller (eventThread::threadMain()) already had it.

The fix was to not acquire the mutex, since threadMain() was the only
caller.

Bug: 73256320
Test: Can toggle "Show taps" from dev options without lockup.
Change-Id: I855b19b3d0ac9e0ea05604cc7b077f4a5030a00b
parent a8cbd474
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -100,8 +100,7 @@ status_t EventThread::registerDisplayEventConnection(
    return NO_ERROR;
}

void EventThread::removeDisplayEventConnection(const wp<EventThread::Connection>& connection) {
    std::lock_guard<std::mutex> lock(mMutex);
void EventThread::removeDisplayEventConnectionLocked(const wp<EventThread::Connection>& connection) {
    mDisplayEventConnections.remove(connection);
}

@@ -195,7 +194,7 @@ void EventThread::threadMain() NO_THREAD_SAFETY_ANALYSIS {
                // handle any other error on the pipe as fatal. the only
                // reasonable thing to do is to clean-up this connection.
                // The most common error we'll get here is -EPIPE.
                removeDisplayEventConnection(signalConnections[i]);
                removeDisplayEventConnectionLocked(signalConnections[i]);
            }
        }
    }
+1 −1
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ private:
                                                           DisplayEventReceiver::Event* event)
            REQUIRES(mMutex);

    void removeDisplayEventConnection(const wp<Connection>& connection);
    void removeDisplayEventConnectionLocked(const wp<Connection>& connection) REQUIRES(mMutex);
    void enableVSyncLocked() REQUIRES(mMutex);
    void disableVSyncLocked() REQUIRES(mMutex);