But this required serious reworking of InstanceControl and GlobalPtr<> classes.
GlobalPtr<> should not be directly derived from class with virtual functions -
virtual table for it's instances may become invalid in the moment,
when cleanup is needed. Therefore indirect link via InstanceList and
InstanceLink is established instead. This required also a little changes in
a way how InstanceControl is used. GlobalPtr<> usage is not changed.
1. Make all firebird mutexes recursive.
2. Enable exceptions to be thrown by mutexes and process them in code where needed.
3. Catch and ignore exceptions in various MutexGuard dtors.
and CORE-1079: Every attach of fbclient/fbembed library leaks 64KB of memory
To do it:
- created new template GlobalPtr, controlling access to destructors of global objects.
- applied it to global objects.
Also some related cleanup.