@kovid: it failed for me a few times. It is extremely timing dependent. Putting in print statements seems to often avoid the failures.
I was able to trace it to some sort of hang in the cover cache. The view was fully initialized after the library change and render_covers() was called. At that point things froze, by the looks of things deadlocked (no processor time). When it failed it seems not to render any covers.
Putting prints into the render thread "fixed" it.

I never got a failure despite 30-40 attempts.
BTW: what is self.pixmap_staging[] used for in CoverCache. As far as I can tell covers are added to a list then never used. Is this some way to avoid garbage collecting covers?