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

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


           Summary: DomainUnload debug events have wrong id during Domain
                    Unload.
    Classification: Mono
           Product: Mono: Runtime
           Version: 2.6.x
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: debug
        AssignedTo: [email protected]
        ReportedBy: [email protected]
         QAContact: [email protected]
          Found By: ---
           Blocker: ---


User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)
AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0

When the runtime unloads a domain, it sends out assembly unload events to the
softdebugger. The assembly->debuggerprotocol_id  hashtable that is used is
stored in the domain, and is already disposed of at this point.

When the runtime then tries to find the id for the assemblyunloadmessage, it
thinks "hey, there is no id for this guy yet. I'll just make a new one".

Here's a repro.

Add this to debugger-agent.c:

if (event == EVENT_KIND_ASSEMBLY_LOAD || event == EVENT_KIND_ASSEMBLY_UNLOAD)
{
    DEBUG (1, fprintf (log_file, "The debuggerprotocol's id for this assembly
was: %d\n", get_id (domain, ID_ASSEMBLY, arg)));
}

right after this line:
DEBUG (1, fprintf (log_file, "[%p] Sent event %s, suspend=%d.\n",
(gpointer)GetCurrentThreadId (), event_to_string (event), suspend_policy));



Then, try to softdebug this program in MonoDevelop:

using System;
using System.Reflection;

namespace SeperateAppDomainTest
{
    class Program
    {
        static void Main(string[] args)
        {
            LoadAssembly();
        }

        public static void LoadAssembly()
        {
            string pathToDll = Assembly.GetExecutingAssembly().CodeBase;
            AppDomainSetup domainSetup = new AppDomainSetup { PrivateBinPath =
pathToDll };
            var newDomain = AppDomain.CreateDomain("FooBar", null,
domainSetup);
            ProxyClass c =
(ProxyClass)(newDomain.CreateInstanceFromAndUnwrap(pathToDll,
typeof(ProxyClass).FullName));
            AppDomain.Unload(newDomain);
        }
    }

    public class ProxyClass : MarshalByRefObject { }
}


After the debug session, inspect the soft debugger logfile,   and look for the
id numbers from the load & unload events.
(showing only relevant lines below)

[00001134] Sent event ASSEMBLY_LOAD, suspend=2.
The debuggerprotocol's id for this assembly was: 1

[00001134] Sent event ASSEMBLY_LOAD, suspend=2.
The debuggerprotocol's id for this assembly was: 4

[00001134] Sent event ASSEMBLY_LOAD, suspend=2.
The debuggerprotocol's id for this assembly was: 5

[00002228] Sent event ASSEMBLY_UNLOAD, suspend=2.
The debuggerprotocol's id for this assembly was: 7
[00002228] Suspended.

Notice how the ID for the unload event does not match any of the id's of the
assemblies that were loaded before.




Reproducible: Always

Steps to Reproduce:
see the details
Actual Results:  


Expected Results:

-- 
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to