See the line
Code:
File "C:\Users\retief\Desktop\nook\calibre\src\calibre\db\cache.py", line 63, in call_func_with_lock
in the traceback, it indicates the the dirty_books_with_dirtied_annotations() function is being called with the DB lock held. So it cannot conflict with anything else, unless that something else is calling some DB code without holding a lock. Is there some code in ReadingList that does this?