8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-23 04:43:03 +01:00

Make sure Engine instance is not destroyed before SharedXXX objects, that uses pointer on Engine in own dtor's.

Also, plugins (i.e. Engine) must be released via Plugin Manager, not directly.
This commit is contained in:
hvlad 2021-07-03 11:52:50 +03:00
parent aa2750ac6e
commit 9e996070fa

View File

@ -32,6 +32,7 @@
#include "../common/os/mod_loader.h"
#include "../common/os/path_utils.h"
#include "../common/classes/ImplementHelper.h"
#include "../common/classes/GetPlugins.h"
#include "../common/StatusHolder.h"
@ -274,6 +275,7 @@ public:
info(*getDefaultMemoryPool()),
children(*getDefaultMemoryPool())
{
engine->addRef();
module = engine->loadModule(status, metadata, &moduleName, &entryPoint);
IUdrFunctionFactory* factory = engine->findNode<IUdrFunctionFactory>(
@ -310,7 +312,7 @@ public:
}
public:
Engine* engine;
AutoPlugin<Engine> engine;
IRoutineMetadata* metadata;
PathName moduleName;
string entryPoint;
@ -336,6 +338,7 @@ public:
info(*getDefaultMemoryPool()),
children(*getDefaultMemoryPool())
{
engine->addRef();
module = engine->loadModule(status, metadata, &moduleName, &entryPoint);
IUdrProcedureFactory* factory = engine->findNode<IUdrProcedureFactory>(
@ -372,7 +375,7 @@ public:
}
public:
Engine* engine;
AutoPlugin<Engine> engine;
IRoutineMetadata* metadata;
PathName moduleName;
string entryPoint;
@ -397,6 +400,7 @@ public:
info(*getDefaultMemoryPool()),
children(*getDefaultMemoryPool())
{
engine->addRef();
module = engine->loadModule(status, metadata, &moduleName, &entryPoint);
IUdrTriggerFactory* factory = engine->findNode<IUdrTriggerFactory>(
@ -434,7 +438,7 @@ public:
}
public:
Engine* engine;
AutoPlugin<Engine> engine;
IRoutineMetadata* metadata;
PathName moduleName;
string entryPoint;