Hi,
I submitted the patch Nov 5 2013 ("[Openexr-devel] Memory leaks in
2.01"). It is also attached. The full thread was started Nov 4 2013 by
Gerhard Huber.
There are some answers to my mail that you should read concerning the
drawbacks of this approach.
Best regards,
Michael
Am 21.01.2016 um 16:35 schrieb Reid, Darren (NBCC Miramichi):
I am searching for a patch that Michael Reinhardt created that added a
staticUninitialize() function to delete the typemap and thus stop
memory leak tools from reporting a bogus leak. Can anyone point me to
it? Thanks!
-Darren
_______________________________________________
Openexr-devel mailing list
Openexr-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/openexr-devel
--
Research Associate
Immersive Media & Communication Group
Vision & Imaging Technologies Department
michael.reinha...@hhi.fraunhofer.de
Tel +49 30 31002‐441
Fraunhofer Heinrich Hertz Institute
Einsteinufer 37, 10587 Berlin, Germany
www.hhi.fraunhofer.de
Index: include/OpenEXR/ImfAttribute.h
===================================================================
--- include/OpenEXR/ImfAttribute.h (revision 169)
+++ include/OpenEXR/ImfAttribute.h (working copy)
@@ -106,7 +106,12 @@
static bool knownType (const char typeName[]);
+ //------------------------------------------------------
+ // Un-register all known attributes.
+ //------------------------------------------------------
+ static void clearAttributeRegistration();
+
protected:
//--------------------------------------------------
Index: include/OpenEXR/ImfHeader.h
===================================================================
--- include/OpenEXR/ImfHeader.h (revision 169)
+++ include/OpenEXR/ImfHeader.h (working copy)
@@ -493,6 +493,7 @@
//------------------------------------------------------------------------
void staticInitialize ();
+void staticUninitialize ();
//-----------------
Index: src/lib/IlmImf/ImfAttribute.cpp
===================================================================
--- src/lib/IlmImf/ImfAttribute.cpp (revision 169)
+++ src/lib/IlmImf/ImfAttribute.cpp (working copy)
@@ -83,22 +83,32 @@
Mutex mutex;
};
+static Mutex criticalSection;
+static LockedTypeMap* typeMapVar = 0;
LockedTypeMap &
typeMap ()
{
- static Mutex criticalSection;
Lock lock (criticalSection);
- static LockedTypeMap* typeMap = 0;
+ if (typeMapVar == 0)
+ typeMapVar = new LockedTypeMap ();
- if (typeMap == 0)
- typeMap = new LockedTypeMap ();
+ return *typeMapVar;
+}
- return *typeMap;
+void
+clearTypeMap ()
+{
+ Lock lock (criticalSection);
+
+ if (typeMapVar != 0)
+ {
+ delete typeMapVar;
+ typeMapVar = 0;
+ }
}
-
} // namespace
@@ -137,7 +147,16 @@
tMap.erase (typeName);
}
+void
+ Attribute::clearAttributeRegistration ()
+{
+ LockedTypeMap& tMap = typeMap();
+ Lock lock (tMap.mutex);
+ tMap.clear ();
+ clearTypeMap();
+}
+
Attribute *
Attribute::newAttribute (const char typeName[])
{
Index: src/lib/IlmImf/ImfHeader.cpp
===================================================================
--- src/lib/IlmImf/ImfHeader.cpp (revision 169)
+++ src/lib/IlmImf/ImfHeader.cpp (working copy)
@@ -1229,15 +1229,14 @@
}
}
+static bool initialized = false;
+static Mutex criticalSection;
void
staticInitialize ()
{
- static Mutex criticalSection;
Lock lock (criticalSection);
- static bool initialized = false;
-
if (!initialized)
{
//
@@ -1277,5 +1276,14 @@
}
}
+void
+staticUninitialize ()
+{
+ Lock lock (criticalSection);
+ Attribute::clearAttributeRegistration();
+
+ initialized = false;
+}
+
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT
_______________________________________________
Openexr-devel mailing list
Openexr-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/openexr-devel