File Backported-fix-for-CORE-5562-Firebird-crashes-when-U.patch of Package firebird

From: AlexPeshkoff <peshkoff@mail.ru>
Date: Thu, 8 Jun 2017 12:44:08 +0300
Subject: Backported fix for CORE-5562: Firebird crashes when UDF gets loaded and unloaded frequently
Patch-mainline: R3_0_3?
Git-commit: b80624c4129b0a8cc3e71671b7a2783915a7aa3f
References: CORE-5562

---
 src/jrd/flu.cpp | 13 +++++++++++--
 src/jrd/flu.h   |  2 ++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/jrd/flu.cpp b/src/jrd/flu.cpp
index 9c15e47090f2..60d5d7e735a4 100644
--- a/src/jrd/flu.cpp
+++ b/src/jrd/flu.cpp
@@ -268,11 +268,20 @@ namespace Jrd
 		return Module();
 	}
 
+	Module::~Module()
+	{
+		if (interMod)
+		{
+			Firebird::MutexLockGuard lg(modulesMutex, FB_FUNCTION);
+			interMod = NULL;	// This makes RefPtr call release()
+		}
+	}
+
 	Module::InternalModule::~InternalModule()
 	{
-		delete handle;
+		fb_assert(modulesMutex->locked());
 
-		Firebird::MutexLockGuard lg(modulesMutex, FB_FUNCTION);
+		delete handle;
 
 		for (FB_SIZE_T m = 0; m < loadedModules().getCount(); m++)
 		{
diff --git a/src/jrd/flu.h b/src/jrd/flu.h
index 3dd8fc0dbc5a..9faabd092680 100644
--- a/src/jrd/flu.h
+++ b/src/jrd/flu.h
@@ -102,6 +102,8 @@ namespace Jrd
 			: interMod(m.interMod)
 		{ }
 
+		~Module();
+
 		// used for UDF/BLOB Filter
 		static FPTR_INT lookup(const char*, const char*, Firebird::SortedObjectsArray<Module>&);
 
-- 
2.13.2

openSUSE Build Service is sponsored by