@davidfor: I think it worth noting that this error:
Quote:
Originally Posted by w00dent0p
calibre, version 5.38.0
ERROR: Error: Error communicating with device
Set changed size during iteration
Traceback (most recent call last):
File "calibre\gui2\device.py", line 87, in run
File "calibre\gui2\device.py", line 592, in _upload_books
File "calibre_plugins.kobotouch_extended.device.driver" , line 416, in upload_books
File "calibre\devices\kobo\driver.py", line 2171, in upload_books
File "calibre_plugins.kobotouch_extended.device.driver" , line 211, in _modify_epub
File "calibre_plugins.kobotouch_extended.container" , line 119, in __init__
File "calibre_plugins.kobotouch_extended.container" , line 375, in __run_async_over_content
File "calibre_plugins.kobotouch_extended.container" , line 368, in __run_async
File "concurrent\futures\_base.py", line 432, in result
File "concurrent\futures\_base.py", line 388, in __get_result
File "concurrent\futures\thread.py", line 57, in run
File "calibre_plugins.kobotouch_extended.container" , line 310, in forced_cleanup
File "calibre_plugins.kobotouch_extended.container" , line 169, in flush_cache
File "calibre_plugins.kobotouch_extended.container" , line 169, in <listcomp>
RuntimeError: Set changed size during iteration
|
is almost certainly caused by the problem we fixed this week, where multiple threads call flush_task(). It would happen if thread A starts and adds to the dirty set while thread B is flush_cache iterating over the dirty set with a comprehension. The set it is complaining about is self.dirty.