Hello, Can you post a small test-case so we can investigate the issue ?
Regards, Laurent Etiemble. 2009/11/18 Duane Wandless <du...@wandless.net>: > I am getting the full call stack below when running, on SL and Leopard. > Using 2.4.2.3 and Monobjc 2.0.413.0. Now I'm pretty confident this is a > terrible solution I found. Any suggestions on how I can address this > correctly would be greatly appreciated. > > I traced the workaround to NSProxy.Dealloc(). I added: > if (this == null) > return; > And adding the check (see below) on cls.Name == "Proxy" to > ObjectiveCRuntime.GetInstance(IntPtr, bool). > > Then the crash no longer occurs. But this does not resolve why 'this' is > null when Dealloc is being called nor why an object of NSProxy is being > referenced in GetInstance. > > I added logging to ObjectiveCRuntime.GetInstance(IntPtr, bool) as well as > the return null if class name is "NSProxy". > > // If no match, try to see if there is an > inheritance relationship > if (result == default(TClass)) > { > Class cls = Class.GetClassFromType(typeof > (TClass)); > Console.WriteLine("Monobjc class name: {0} > ip {1:X} {2}", cls.Name, value, canFail); > if (cls.Name == "NSProxy") > return null; > > I also added logging to Dealloc to print out what object is being > deallocated. I see lots of this: > Console.WriteLine("nativeptr {0:X} {1}", this.NativePointer, > this.Class.Name); > > nativeptr 398951232 _IKIRLMainProxy > nativeptr 402144384 _IKIRLMainProxy > nativeptr 402144400 _IKIRLMainProxy > nativeptr 402167744 _IKIRLMainProxy > nativeptr 398909232 _IKIRLMainProxy > nativeptr 398940800 _IKIRLMainProxy > > Whenever I alt-tab away from my window and come back this output streams for > hundreds of lines with every once in a while a reference to Dealloc having a > this pointer that is null. > > So some questions. Should an NSProxy class ever be checked in GetInstance? > Is the constant Dealloc-ing of _IKIRLMainProxy expected? Any ideas on how > this becomes null and then dealloc is called? > > thanks! > Duane > > Here is the call stack from C#. > > (gdb) p (char *)mono_pmip (0x058db27e) > $6 = 0x18128d90 " (wrapper managed-to-native) > Monobjc.ObjectiveCRuntime:isKindOfClass (intptr,intptr,intptr) + 0x2e > (0x58db250 0x58db2a4) [0x20bde58 - MacMonoClient.exe]" > (gdb) p (char *)mono_pmip (0x03f0ef22) > $7 = 0x17196eb0 " Monobjc.ObjectiveCRuntime:GetInstance<object> > (intptr,bool) + 0x152 (0x3f0edd0 0x3f0f431) [0x20bde58 - MacMonoClient.exe]" > (gdb) p (char *)mono_pmip (0x03f0edbf) > $8 = 0x1717f690 " Monobjc.ObjectiveCRuntime:GetInstance<object> (intptr) + > 0x27 (0x3f0ed98 0x3f0edc4) [0x20bde58 - MacMonoClient.exe]" > (gdb) p (char *)mono_pmip (0x180c4eee) > $9 = 0x1812ccd0 " Monobjc.Dynamic.Proxies.Monobjc.Cocoa.NSProxy:Dealloc > (intptr,intptr) + 0x16 (0x180c4ed8 0x180c4eff) [0x20bde58 - > MacMonoClient.exe]" > (gdb) p (char *)mono_pmip (0x03f017e6) > $10 = 0x1812c770 " (wrapper native-to-managed) > Monobjc.Dynamic.Proxies.Monobjc.Cocoa.NSProxy:Dealloc (intptr,intptr) + 0x2e > (0x3f017b8 0x3f017f2) [0x20bde58 - MacMonoClient.exe]" > > Monobjc class name: NSProxy ip 401881888 False > 2009-11-17 18:35:45.576 PIXFiles[11651:980b] An uncaught exception was > raised > 2009-11-17 18:35:45.577 PIXFiles[11651:980b] *** -[NSProxy > doesNotRecognizeSelector:isKindOfClass:] called! > 2009-11-17 18:35:45.579 PIXFiles[11651:980b] *** Terminating app due to > uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSProxy > doesNotRecognizeSelector:isKindOfClass:] called!' > *** Call stack at first throw: > (gdb) where > #0 0x9264fb07 in ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___ () > #1 0x94e1cf49 in objc_exception_throw () > #2 0x926052b8 in +[NSException raise:format:arguments:] () > #3 0x9260522a in +[NSException raise:format:] () > #4 0x96a42b51 in -[NSProxy doesNotRecognizeSelector:] () > #5 0x925ad026 in ___forwarding___ () > #6 0x925acbf2 in __forwarding_prep_0___ () > #7 0x96a43040 in -[NSProxy isKindOfClass:] () > #8 0x058db27e in ?? () > #9 0x03f0ef22 in ?? () > #10 0x03f0edbf in ?? () > #11 0x180c4eee in ?? () > #12 0x03f017e6 in ?? () > #13 0x90014f2e in -[_IKIRLMainProxy dealloc] () > #14 0x9253f9d8 in CFRelease () > #15 0x9256c5bd in _CFAutoreleasePoolPop () > #16 0x9690be62 in NSPopAutoreleasePool () > #17 0x9690bd8a in -[NSAutoreleasePool drain] () > #18 0x900cbdea in -[IKTaskManager taskLoop] () > #19 0x9691e964 in -[NSThread main] () > #20 0x9691e914 in __NSThread__main__ () > #21 0x90468f39 in _pthread_start () > #22 0x90468dbe in thread_start () >