Index: keyring-5.3/keyring/backends/file.py =================================================================== --- keyring-5.3.orig/keyring/backends/file.py +++ keyring-5.3/keyring/backends/file.py @@ -6,6 +6,7 @@ import base64 import sys import json import abc +import time from ..py27compat import configparser @@ -95,14 +96,29 @@ class BaseKeyring(FileBacked, KeyringBac config = configparser.RawConfigParser() config.read(self.file_path) + # obtain lock for the keyring file + lock = '' + i = 60 + while i: + if not os.path.isfile('/tmp/.keyringlock'): + lock = open('/tmp/.keyringlock', 'w') + break + else: + time.sleep(0.500) + i=i-1 + # update the keyring with the password if not config.has_section(service): config.add_section(service) config.set(service, username, password_base64) - # save the keyring back to the file - with open(self.file_path, 'w') as config_file: - config.write(config_file) + if i: + # save the keyring back to the file + with open(self.file_path, 'w') as config_file: + config.write(config_file) + lock.close() + os.remove('/tmp/.keyringlock') + def _ensure_file_path(self): """