Very cool bug and great analysis - thanks for reporting this. BTW That code lives in MetaPythonType.Calls now.
It seems like this logic needs to be moved into PythonType.CreateInstance instead instead of in the generated rule code. -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of William Reade Sent: Monday, September 29, 2008 7:11 AM To: users@lists.ironpython.com Subject: [IronPython] blocker: objects deleted when they shouldn't be Hi all I'm about to file this on Codeplex, but I think I've tracked down a subtle and nasty bug, which is blocking Ironclad with numpy (it fatally breaks matrices and masked arrays), and I feel compelled to shout loudly about it to ensure it doesn't get lost in the noise of the impending 2.0 release. In short, the following code: ------------------------------------------------------------- from System import GC class C(object): _instance = None def __new__(cls): if C._instance is None: C._instance = object.__new__(cls) return C._instance def __del__(self): print 'deleting object with id', id(self) c = C() print 'created a C with id', id(c) d = C() print 'created another C with id', id(d) for _ in range(3): GC.Collect() GC.WaitForPendingFinalizers() print id(c), id(d) print c print d ------------------------------------------------------------- ...produces the following output: ------------------------------------------------------------- C:\dev\ironclad\build>ipy deltest.py created a C with id 43 created another C with id 43 deleting object with id 43 43 43 <C object at 0x000000000000002B> <C object at 0x000000000000002B> ------------------------------------------------------------- ...and I don't think that the 'deleting...' message should be printed at that point. My suspicion is that c's 'magic_finalization_wossname'* slot is being overwritten with a new instance after __new__ returns, leaving the original 'magic_finalization_wossname' unreferenced; in the fullness of time, that gets finalized and calls c.__del__, even though c itself still exists. Cheers William * This is probably not the actual member name, but I couldn't find the relevant code today, even though I remember reading it in the past... hopefully the implementers know what I'm trying to refer to, even if nobody else does. _______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com _______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com