diff --git a/sabnzbd/config.py b/sabnzbd/config.py index fcba4b9..03350cd 100644 --- a/sabnzbd/config.py +++ b/sabnzbd/config.py @@ -687,6 +687,7 @@ def read_config(path): def save_config(force=False): """ Update Setup file with current option values """ global CFG, database, modified + assert isinstance(CFG, configobj.ConfigObj) if not (modified or force): return True @@ -724,19 +725,33 @@ def save_config(force=False): else: CFG[sec][kw] = value + filename = CFG.filename try: - CFG.write() + # Read current content f = open(CFG.filename) - x = f.read() + data = f.read() f.close() - f = open(CFG.filename, "w") - f.write(x) - f.flush() + + # Write to temp file + CFG.filename = filename + '.tmp' + f = open(CFG.filename, 'w') + f.write(data) f.close() + + # Update temp file content + CFG.write() + + # Rename temp file, overwriting old one + os.remove(filename) + os.rename(CFG.filename, filename) + modified = False - return True - except IOError: - return False + res = True + except: + logging.error(Ta('Cannot create temp file for %s'), CFG.filename) + res = False + CFG.filename = filename + return res