[Mono-bugs] [Bug 583501] New: generic sharing causes crash on some dynamically generated method(?)

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Thu Feb 25 21:18:36 EST 2010


http://bugzilla.novell.com/show_bug.cgi?id=583501

http://bugzilla.novell.com/show_bug.cgi?id=583501#c0


           Summary: generic sharing causes crash on some dynamically
                    generated method(?)
    Classification: Mono
           Product: Mono: Runtime
           Version: SVN
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Minor
          Priority: P5 - None
         Component: generics
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: aenomoto at novell.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---


Generic sharing seems to report some mysterious error as compared to when GS is
disabled.

The problematic type in use is dynamically generated by SRE and has
insufficient interface implementation. When GS is disabled, it exactly reports
what's missing. With GS enabled, the runtime just crashes reporting assertion
failure.

The example repro requires r152519 of mcs/class/System.ServiceModel (this may
be fixed by having "correct" implementation of the problematic type).

Repro:

The example repro uses WCF client proxy, and happens only when you build
System.ServiceModel.dll with -/d:USE_OD_REFERENCE_IN_PROXY option. So, add the
compiler option to LIB_MCS_FLAGS in the Makefile and build it first.

Then compile and run below (it is taken from our
CallbackBehaviorAttributeTest):

// ---- repro ----
using System;
using System.Threading;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;

class Test
{
    public static bool CallbackSent, CallbackReceived;

    public static void Main ()
    {
            ServiceHost eventServiceHost = new ServiceHost (typeof
(GreetingsService));
            NetTcpBinding tcpBindingpublish = new NetTcpBinding ();
            tcpBindingpublish.Security.Mode = SecurityMode.None;
            eventServiceHost.AddServiceEndpoint (typeof (IGreetings),
tcpBindingpublish, "net.tcp://localhost:8000/GreetingsService");
            eventServiceHost.Open ();

            //Create client proxy
            NetTcpBinding clientBinding = new NetTcpBinding ();
            clientBinding.Security.Mode = SecurityMode.None;
            EndpointAddress ep = new EndpointAddress
("net.tcp://localhost:8000/GreetingsService");
            ClientCallback cb = new ClientCallback ();
            IGreetings proxy = DuplexChannelFactory<IGreetings>.CreateChannel
(new InstanceContext (cb), clientBinding, ep);

            //Call service
            proxy.SendMessage ();

            //Wait for callback - sort of hack, but better than using wait
handle to possibly block tests.
            Thread.Sleep (1000);

            //Cleanup
            eventServiceHost.Close ();

    }
}

Actual result:

ERROR:generic-sharing.c:712:class_get_rgctx_template_oti: assertion failed:
(oti)

Expected result:
show an error dialog saying I'm missing some interface implementations on the
dynamically generated code.

-- 
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the mono-bugs mailing list