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