summaryrefslogtreecommitdiff
path: root/external/firebird/0001-Avoid-hangup-in-SS-when-error-happens-at-system-atta.patch.1
blob: e569fccdced68cd663d189e902970a7cc5530f03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
From 36a7a2634669075be3294a1d075524a0b6f80962 Mon Sep 17 00:00:00 2001
From: hvlad <hvlad@users.sourceforge.net>
Date: Wed, 17 Aug 2016 15:45:30 +0300
Subject: [PATCH] Avoid hangup in SS when error happens at system attachment
 initialization time

---
 src/jrd/cch.cpp | 7 ++++++-
 src/jrd/vio.cpp | 5 +++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/jrd/cch.cpp b/src/jrd/cch.cpp
index 35ea096..643cf4d 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 a8cf0fc..3d35a27 100644
--- a/src/jrd/vio.cpp
+++ b/src/jrd/vio.cpp
@@ -4988,6 +4988,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)
-- 
2.9.3