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 ()

Reply via email to