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

Commit d24ac9ab authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by android-build-merger
Browse files

Merge "Don\'t hold a lock while reading shared preferences from disk." into nyc-dev

am: 53503069

* commit '53503069':
  Don't hold a lock while reading shared preferences from disk.
parents 8470e6c2 53503069
Loading
Loading
Loading
Loading
+23 −23
Original line number Diff line number Diff line
@@ -87,14 +87,13 @@ final class SharedPreferencesImpl implements SharedPreferences {
        }
        new Thread("SharedPreferencesImpl-load") {
            public void run() {
                synchronized (SharedPreferencesImpl.this) {
                    loadFromDiskLocked();
                }
                loadFromDisk();
            }
        }.start();
    }

    private void loadFromDiskLocked() {
    private void loadFromDisk() {
        synchronized (SharedPreferencesImpl.this) {
            if (mLoaded) {
                return;
            }
@@ -102,6 +101,7 @@ final class SharedPreferencesImpl implements SharedPreferences {
                mFile.delete();
                mBackupFile.renameTo(mFile);
            }
        }

        // Debugging
        if (mFile.exists() && !mFile.canRead()) {
@@ -118,28 +118,28 @@ final class SharedPreferencesImpl implements SharedPreferences {
                    str = new BufferedInputStream(
                            new FileInputStream(mFile), 16*1024);
                    map = XmlUtils.readMapXml(str);
                } catch (XmlPullParserException e) {
                    Log.w(TAG, "getSharedPreferences", e);
                } catch (FileNotFoundException e) {
                    Log.w(TAG, "getSharedPreferences", e);
                } catch (IOException e) {
                } catch (XmlPullParserException | IOException e) {
                    Log.w(TAG, "getSharedPreferences", e);
                } finally {
                    IoUtils.closeQuietly(str);
                }
            }
        } catch (ErrnoException e) {
            /* ignore */
        }

        synchronized (SharedPreferencesImpl.this) {
            mLoaded = true;
            if (map != null) {
                mMap = map;
                mStatTimestamp = stat.st_mtime;
                mStatSize = stat.st_size;
            } else {
            mMap = new HashMap<String, Object>();
                mMap = new HashMap<>();
            }
            notifyAll();
        }
    }

    static File makeBackupFile(File prefsFile) {
        return new File(prefsFile.getPath() + ".bak");