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

Commit a6138c51 authored by Emilian Peev's avatar Emilian Peev
Browse files

Camera: Avoid possible race conditions during in-flight dump

Access to the camera device "mInFlightMap" is currently
synchronized via "mInFlightLock". The device dump
sequence doesn't try to lock or acquire this mutex when
working with the map which makes data races  possible.
To avoid potential instabilities and inconsistent dump
information, try to lock 'mInFlightLock' before querying
any in-flight data.

Bug: 191224953
Test: Manual using camera application
Change-Id: Icb5c172a17476c7ef22bb85ca9430dfbf014e947
parent 22de95f3
Loading
Loading
Loading
Loading
+14 −9
Original line number Original line Diff line number Diff line
@@ -779,6 +779,7 @@ status_t Camera3Device::dump(int fd, const Vector<String16> &args) {
    }
    }


    lines = String8("    In-flight requests:\n");
    lines = String8("    In-flight requests:\n");
    if (mInFlightLock.try_lock()) {
        if (mInFlightMap.size() == 0) {
        if (mInFlightMap.size() == 0) {
            lines.append("      None\n");
            lines.append("      None\n");
        } else {
        } else {
@@ -790,6 +791,10 @@ status_t Camera3Device::dump(int fd, const Vector<String16> &args) {
                        r.numBuffersLeft);
                        r.numBuffersLeft);
            }
            }
        }
        }
        mInFlightLock.unlock();
    } else {
        lines.append("      Failed to acquire In-flight lock!\n");
    }
    write(fd, lines.string(), lines.size());
    write(fd, lines.string(), lines.size());


    if (mRequestThread != NULL) {
    if (mRequestThread != NULL) {