diff --git a/picard/config.py b/picard/config.py index 9c77362e5..be1c31d10 100644 --- a/picard/config.py +++ b/picard/config.py @@ -32,6 +32,8 @@ import os import shutil import threading +import fasteners + from PyQt5 import QtCore from picard import ( @@ -129,6 +131,7 @@ class Config(QtCore.QSettings): """Common initializer method for :meth:`from_app` and :meth:`from_file`.""" + self.setAtomicSyncRequired(False) self.application = ConfigSection(self, "application") self.setting = ConfigSection(self, "setting") self.persist = ConfigSection(self, "persist") @@ -139,6 +142,18 @@ class Config(QtCore.QSettings): self._version = Version.from_string(self.application["version"]) self._upgrade_hooks = dict() + def event(self, event): + if event.type() == QtCore.QEvent.UpdateRequest: + log.debug('Config file update requested on thread %r', threading.get_ident()) + self.sync() + return True + else: + return super().event(event) + + def sync(self): + with fasteners.InterProcessLock(self.fileName()): + super().sync() + @classmethod def from_app(cls, parent): """Build a Config object using the default configuration file diff --git a/requirements-macos-10.12.txt b/requirements-macos-10.12.txt index 4dadc134b..30a04c0c8 100644 --- a/requirements-macos-10.12.txt +++ b/requirements-macos-10.12.txt @@ -1,5 +1,6 @@ python-dateutil==2.8.1 discid==1.2.0 +fasteners==0.16 markdown==3.2.2 mutagen==1.45.1 pyobjc-core==6.2.2 diff --git a/requirements-macos-10.14.txt b/requirements-macos-10.14.txt index c92cd4385..d5ff30c0e 100644 --- a/requirements-macos-10.14.txt +++ b/requirements-macos-10.14.txt @@ -1,5 +1,6 @@ python-dateutil==2.8.1 discid==1.2.0 +fasteners==0.16 markdown==3.2.2 mutagen==1.45.1 pyobjc-core==6.2.2 diff --git a/requirements-win.txt b/requirements-win.txt index b67811b21..0ff66fec5 100644 --- a/requirements-win.txt +++ b/requirements-win.txt @@ -1,5 +1,6 @@ python-dateutil==2.8.1 discid==1.2.0 +fasteners==0.16 markdown==3.2.2 mutagen==1.45.1 PyQt5==5.15.2 diff --git a/requirements.txt b/requirements.txt index 86b7ecfed..1e4ce674a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ python-dateutil>=2.7.3 discid +fasteners markdown mutagen>=1.37 pyobjc-core<7.0; sys_platform == 'darwin'