diff --git a/src/jrd/cch.cpp b/src/jrd/cch.cpp index 266f67d773..f808c038ed 100644 --- a/src/jrd/cch.cpp +++ b/src/jrd/cch.cpp @@ -2963,10 +2963,15 @@ static THREAD_ENTRY_DECLARE cache_writer(THREAD_ENTRY_PARAM arg) iscDbLogStatus(dbb->dbb_filename.c_str(), &status_vector); } - bcb->bcb_flags &= ~(BCB_cache_writer | BCB_writer_start); + bcb->bcb_flags &= ~BCB_cache_writer; try { + if (bcb->bcb_flags & BCB_writer_start) + { + bcb->bcb_flags &= ~BCB_writer_start; + bcb->bcb_writer_init.release(); + } bcb->bcb_writer_fini.release(); } catch (const Firebird::Exception& ex) diff --git a/src/jrd/vio.cpp b/src/jrd/vio.cpp index 11f3bab154..c18caf5a5c 100644 --- a/src/jrd/vio.cpp +++ b/src/jrd/vio.cpp @@ -4549,6 +4549,11 @@ static THREAD_ENTRY_DECLARE garbage_collector(THREAD_ENTRY_PARAM arg) try { // Notify the finalization caller that we're finishing. + if (dbb->dbb_flags & DBB_gc_starting) + { + dbb->dbb_flags &= ~DBB_gc_starting; + dbb->dbb_gc_init.release(); + } dbb->dbb_gc_fini.release(); } catch (const Firebird::Exception& ex)