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

Commit de25366c authored by Mark Salyzyn's avatar Mark Salyzyn Committed by Automerger Merge Worker
Browse files

storaged: protect global proto_loaded am: 32b5003c

Original change: https://googleplex-android-review.googlesource.com/c/platform/system/core/+/13113781

Change-Id: I45a2313d15210c0383916a03d875e50423cea0cd
parents ba26e886 32b5003c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ class storaged_t : public android::hardware::health::V2_0::IHealthInfoCallback,
    sp<android::hardware::health::V2_0::IHealth> health;
    unique_ptr<storage_info_t> storage_info;
    static const uint32_t current_version;
    Mutex proto_lock;
    unordered_map<userid_t, bool> proto_loaded;
    void load_proto(userid_t user_id);
    char* prepare_proto(userid_t user_id, StoragedProto* proto);
+6 −0
Original line number Diff line number Diff line
@@ -162,6 +162,8 @@ storaged_t::storaged_t(void) {
}

void storaged_t::add_user_ce(userid_t user_id) {
    Mutex::Autolock _l(proto_lock);

    if (!proto_loaded[user_id]) {
        load_proto(user_id);
        proto_loaded[user_id] = true;
@@ -169,6 +171,8 @@ void storaged_t::add_user_ce(userid_t user_id) {
}

void storaged_t::remove_user_ce(userid_t user_id) {
    Mutex::Autolock _l(proto_lock);

    proto_loaded[user_id] = false;
    mUidm.clear_user_history(user_id);
    RemoveFileIfExists(proto_path(user_id), nullptr);
@@ -298,6 +302,8 @@ void storaged_t::flush_proto(userid_t user_id, StoragedProto* proto) {
}

void storaged_t::flush_protos(unordered_map<int, StoragedProto>* protos) {
    Mutex::Autolock _l(proto_lock);

    for (auto& it : *protos) {
        /*
         * Don't flush proto if we haven't attempted to load it from file.