From e1db9164c8b082997e440ea080ae00f2c8697a94 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Sun, 5 Dec 2021 20:31:21 +0400 Subject: [PATCH] Fixed deadlock in Library::writeBookmarksToFile() --- src/library.cpp | 7 ++----- src/libxml_dumper.cpp | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index 79ccbf044..760e3d142 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -274,11 +274,8 @@ bool Library::writeToFile(const std::string& path) const bool Library::writeBookmarksToFile(const std::string& path) const { LibXMLDumper dumper(this); - std::string xml; - { - std::lock_guard lock(m_mutex); - xml = dumper.dumpLibXMLBookmark(); - }; + // NOTE: LibXMLDumper::dumpLibXMLBookmark uses Library in a thread-safe way + const std::string xml = dumper.dumpLibXMLBookmark(); return writeTextFile(path, xml); } diff --git a/src/libxml_dumper.cpp b/src/libxml_dumper.cpp index 5a681e861..db03a2005 100644 --- a/src/libxml_dumper.cpp +++ b/src/libxml_dumper.cpp @@ -91,7 +91,7 @@ void LibXMLDumper::handleBookmark(Bookmark bookmark, pugi::xml_node root_node) { auto book_node = entry_node.append_child("book"); try { - auto book = library->getBookById(bookmark.getBookId()); + auto book = library->getBookByIdThreadSafe(bookmark.getBookId()); ADD_TEXT_ENTRY(book_node, "id", book.getId()); ADD_TEXT_ENTRY(book_node, "title", book.getTitle()); ADD_TEXT_ENTRY(book_node, "language", book.getLanguage());