Don't assume that size file is valid
I don't know how my cache got into this state, but I had an empty size
file:
$ cat ~/.cache/mcg/127.0.0.1/size
$ stat ~/.cache/mcg/127.0.0.1/size
File: /home/jeremy/.cache/mcg/127.0.0.1/size
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 254,0 Inode: 18493061 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ jeremy) Gid: ( 100/ users)
Access: 2022-09-14 00:18:32.942885525 -0700
Modify: 2022-09-07 12:32:44.151734944 -0700
Change: 2022-09-07 12:32:44.151734944 -0700
Birth: 2022-08-25 10:01:01.729717504 -0700
This was causing mcg's Library view to crash like this:
(.mcg-wrapped:879276): Gtk-CRITICAL **: 00:19:15.727: gtk_window_add_accel_group: assertion 'GTK_IS_WINDOW (window)' failed
Exception in thread Thread-1 (_set_playlist):
Traceback (most recent call last):
File "/nix/store/c1vb2z3c64i0sd92iz7fv0lb720qcvhb-python3-3.10.6/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
self.run()
File "/nix/store/c1vb2z3c64i0sd92iz7fv0lb720qcvhb-python3-3.10.6/lib/python3.10/threading.py", line 953, in run
self._target(*self._args, **self._kwargs)
File "/nix/store/l935dwmk93sq2chr4xxiipv9amyfcg43-CoverGrid-3.1/share/mcg/mcg/playlistpanel.py", line 256, in _set_playlist
cache = client.MCGCache(host, size)
File "/nix/store/l935dwmk93sq2chr4xxiipv9amyfcg43-CoverGrid-3.1/share/mcg/mcg/client.py", line 1279, in __init__
self._read_size()
File "/nix/store/l935dwmk93sq2chr4xxiipv9amyfcg43-CoverGrid-3.1/share/mcg/mcg/client.py", line 1293, in _read_size
size = int(f.readline())
ValueError: invalid literal for int() with base 10: ''
Maybe mcg crashed while writing the `size` file at some point? I see
that it writes directly to the size file, which seems potentially risky:
it would probably be safer to write to a temp file and then (atomically)
move it. Still, it seems like a good practice to be resilient here.
After this change, here's what I see get printed by mcg:
(.mcg-wrapped:889856): Gtk-CRITICAL **: 00:37:00.045: gtk_window_add_accel_group: assertion 'GTK_IS_WINDOW (window)' failed
2022-09-14 00:37:00,076 WARNING: invalid cache file: /home/jeremy/.cache/mcg/127.0.0.1/size, deleting file
Traceback (most recent call last):
File "/nix/store/vzgcfs00nq543hjk8hrk81k1rs8aqpqw-CoverGrid-3.1/share/mcg/mcg/client.py", line 1295, in _read_size
size = int(f.readline())
ValueError: invalid literal for int() with base 10: ''
And then the problem goes away =)
This commit is contained in:
parent
48b1d90fc8
commit
ea71d96dd7
1 changed files with 6 additions and 1 deletions
|
|
@ -1271,6 +1271,7 @@ class MCGCache():
|
|||
|
||||
|
||||
def __init__(self, host, size):
|
||||
self._logger = logging.getLogger(__name__)
|
||||
self._host = host
|
||||
self._size = size
|
||||
self._dirname = os.path.expanduser(os.path.join(MCGCache.DIRNAME, host))
|
||||
|
|
@ -1290,7 +1291,11 @@ class MCGCache():
|
|||
filename = os.path.join(self._dirname, MCGCache.SIZE_FILENAME)
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r') as f:
|
||||
size = int(f.readline())
|
||||
try:
|
||||
size = int(f.readline())
|
||||
except:
|
||||
self._logger.warning("invalid cache file: %s, deleting file", filename, exc_info=True)
|
||||
size = None
|
||||
# Clear cache if size has changed
|
||||
if size != self._size:
|
||||
self._clear()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue