This is the only stack trace I've seen: Unhandled Exception: System.ArgumentException: Duplicate type name within an assembly. at System.Reflection.Emit.ModuleBuilder.DefineType (System.String name, TypeAttributes attr, System.Type parent, System.Type[] interfaces, PackingSize packingSize, Int32 typesize) [0x00000] at System.Reflection.Emit.ModuleBuilder.DefineType (System.String name, TypeAttributes attr, System.Type parent, System.Type[] interfaces) [0x00000] at System.Reflection.Emit.ModuleBuilder.DefineType (System.String name, TypeAttributes attr) [0x00000] at Monobjc.Bridge.Generators.DynamicMessagingGenerator.DefineMessagingDelegate[UInt32] (System.String message, System.String typeName, System.Type[] parameterTypes) [0x00000] at Monobjc.Bridge.Generators.DynamicMessagingGenerator.SendMessage[UInt32] (System.String message, IntPtr receiver, IntPtr selector) [0x00000] at Monobjc.ObjectiveCRuntime.SendMessage[UInt32] (IManagedWrapper receiver, System.String selector) [0x00000] at Monobjc.Cocoa.NSData.get_Length () [0x00000] at MyAPI.XmlRpc.DownloadData (System.String url) [0x00000] at MyAPI.Loader.DownloadThumbnail (System.String fileUrl, System.String localName, Boolean bAsync, Boolean bEncrypt) [0x00000] at MyAPI.Loader.ThreadRun () [0x00000]
And I've not seen it again. So I'm very glad that I did my analysis right then. Do let me know if you need anything further with this issue. Thanks, Duane On Wed, Dec 9, 2009 at 1:35 PM, Laurent Etiemble < [email protected]> wrote: > Hello, > > You are right, this part is not guarded to be thread-safe. I will add > a critical section around the generation code. > > Can you still send the stack-trace for curiosity ? > > Regards, Laurent Etiemble. > > 2009/12/9 Duane Wandless <[email protected]>: > > Laurent, I'm guessing this is a threading issue. I ran into this call > > stack: > > Unhandled Exception: System.ArgumentException: Duplicate type name within > an > > assembly. > > at System.Reflection.Emit.ModuleBuilder.DefineType (System.String name, > > TypeAttributes attr, System.Type parent, System.Type[] interfaces, > > PackingSize packingSize, Int32 typesize) [0x00000] > > at System.Reflection.Emit.ModuleBuilder.DefineType (System.String name, > > TypeAttributes attr, System.Type parent, System.Type[] interfaces) > > [0x00000] > > at System.Reflection.Emit.ModuleBuilder.DefineType (System.String name, > > TypeAttributes attr) [0x00000] > > at > > > Monobjc.Bridge.Generators.DynamicMessagingGenerator.DefineMessagingDelegate[UInt32] > > (System.String message, System.String typeName, System.Type[] > > parameterTypes) [0x00000] > > at > Monobjc.Bridge.Generators.DynamicMessagingGenerator.SendMessage[UInt32] > > (System.String message, IntPtr receiver, IntPtr selector) [0x00000] > > at Monobjc.ObjectiveCRuntime.SendMessage[UInt32] (IManagedWrapper > > receiver, System.String selector) [0x00000] > > at Monobjc.Cocoa.NSData.get_Length () [0x00000] > > at MyAPI.XmlRpc.DownloadData (System.String url) [0x00000] > > at MyAPI.Loader.DownloadThumbnail (System.String fileUrl, System.String > > localName, Boolean bAsync, Boolean bEncrypt) [0x00000] > > at MyAPI.Loader.ThreadRun () [0x00000] > > > > I am firing off 3 threads that execute this same code. Looking > > at DynamicMessagingGenerator.SendMessage() it appears it would not be > thread > > safe. SendMessage checks in messagingMethodsArgs to see if the key > already > > exists... if not it creates a new one. > > In my console output from this crash I actually saw this same stack > twice... > > which implies all 3 got past the if check, the first thread created the > > invoker and the next 2 threads failed because it already existed. > > And of course this is not easy to reproduce as it would be a timing > issue. > > I'd appreciate your thoughts on this. I could see adding a lock > > around messagingMethodsArgs. > > Thanks, > > Duane > > >

