8000 Add cleanup to ClassInfo · pythonnet/pythonnet@d2408b9 · GitHub
[go: up one dir, main page]

Skip to content

Commit d2408b9

Browse files
committed
Add cleanup to ClassInfo
Addresses comment: #958
1 parent d1799aa commit d2408b9

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

src/runtime/classmanager.cs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,6 @@ private static void InitClassBase(Type type, ClassBase impl)
212212
var item = (ManagedType)iter.Value;
213213
var name = (string)iter.Key;
214214
Runtime.PyDict_SetItemString(dict, name, item.pyHandle);
215-
// info.members are already useless
216-
item.DecrRefCount();
217215
}
218216

219217
// If class has constructors, generate an __doc__ attribute.
@@ -463,7 +461,7 @@ private static ClassInfo GetClassInfo(Type type)
463461
}
464462

465463

466-
internal class ClassInfo
464+
internal class ClassInfo : IDisposable
467465
{
468466
public Indexer indexer;
469467
public Hashtable members;
@@ -473,5 +471,28 @@ internal ClassInfo()
473471
members = new Hashtable();
474472
indexer = null;
475473
}
474+
475+
~ClassInfo()
476+
{
477+
Dispose();
478+
}
479+
480+
private bool disposed = false;
481+
482+
public void Dispose()
483+
{
484+
if (!disposed)
485+
{
486+
disposed = true;
487+
foreach(var member in members)
488+
{
489+
var item = (ManagedType)member;
490+
if (item != null)
491+
{
492+
item.DecrRefCount();
493+
}
494+
}
495+
}
496+
}
476497
}
477498
}

0 commit comments

Comments
 (0)
0