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

Commit 577d3c03 authored by Paul Lawrence's avatar Paul Lawrence Committed by Automerger Merge Worker
Browse files

Merge "Fix deadlock caused by two-threaded property controls" into udc-dev am: 82db8b9c

parents aa926331 82db8b9c
Loading
Loading
Loading
Loading
+27 −23
Original line number Diff line number Diff line
@@ -117,7 +117,6 @@ static bool accept_messages = false;
static std::mutex accept_messages_lock;
static std::thread property_service_thread;
static std::thread property_service_for_system_thread;
static std::mutex set_property_lock;

static std::unique_ptr<PersistWriteThread> persist_write_thread;

@@ -395,7 +394,11 @@ static std::optional<uint32_t> PropertySet(const std::string& name, const std::s
        return {PROP_ERROR_INVALID_VALUE};
    }

    auto lock = std::lock_guard{set_property_lock};
    if (name == "sys.powerctl") {
        // No action here - NotifyPropertyChange will trigger the appropriate action, and since this
        // can come to the second thread, we mustn't call out to the __system_property_* functions
        // which support multiple readers but only one mutator.
    } else {
        prop_info* pi = (prop_info*)__system_property_find(name.c_str());
        if (pi != nullptr) {
            // ro.* properties are actually "write-once".
@@ -422,6 +425,7 @@ static std::optional<uint32_t> PropertySet(const std::string& name, const std::s
            }
            WritePersistentProperty(name, value);
        }
    }

    NotifyPropertyChange(name, value);
    return {PROP_SUCCESS};