You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
With python2.6, reloading extension modules does not always leak memory:
Python 2.6b2+ (trunk, Aug 19 2008, 23:45:24) [MSC v.1500 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
[34467 refs]
>>> import audioop; del sys.modules['audioop']
[34677 refs]
>>> import audioop; del sys.modules['audioop']
[34677 refs]
But with 3.0, reloading audioop leaks 60 references every time (seen in
test_unittest):
Python 3.0b3+ (py3k, Aug 24 2008, 21:56:40) [MSC v.1500 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
[42018 refs]
>>> import audioop; del sys.modules['audioop']
[42257 refs]
>>> import audioop; del sys.modules['audioop']
[42317 refs]
>>> import audioop; del sys.modules['audioop']
[42377 refs]
>>> import audioop; del sys.modules['audioop']
[42437 refs]
>>> import audioop; del sys.modules['audioop']
[42497 refs]
OK, many things cannot be reinitialized for C-written modules (static
variables &co), this is not the case for audioop. Furthermore, I thought
that the new module API was to support proper cleanup of modules
The fix is actually simple: _PyImport_FindExtension() used to return a
borrowed reference, the "strong" reference being stored in the
PyImport_GetModuleDict() dictionary. All paths should behave the same.
See attached patch.
(for unit tests, run for example
regrtest.py -R:: test_site
)
Activity
amauryfa commentedon Aug 24, 2008
With python2.6, reloading extension modules does not always leak memory:
But with 3.0, reloading audioop leaks 60 references every time (seen in
test_unittest):
OK, many things cannot be reinitialized for C-written modules (static
variables &co), this is not the case for audioop. Furthermore, I thought
that the new module API was to support proper cleanup of modules
amauryfa commentedon Aug 28, 2008
The fix is actually simple: _PyImport_FindExtension() used to return a
borrowed reference, the "strong" reference being stored in the
PyImport_GetModuleDict() dictionary. All paths should behave the same.
See attached patch.
(for unit tests, run for example
regrtest.py -R:: test_site
)
warsaw commentedon Sep 4, 2008
The patch looks good. Benjamin will commit this.
benjaminp commentedon Sep 4, 2008
Fixed in r66204.