[Mono-bugs] [Bug 74192][Nor] New - Secondary AppDomain loaded assembly loses reference
bugzilla-daemon@bugzilla.ximian.com
bugzilla-daemon@bugzilla.ximian.com
Tue, 29 Mar 2005 12:34:39 -0500 (EST)
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by andrewarnott@byu.edu.
http://bugzilla.ximian.com/show_bug.cgi?id=74192
--- shadow/74192 2005-03-29 12:34:39.000000000 -0500
+++ shadow/74192.tmp.8099 2005-03-29 12:34:39.000000000 -0500
@@ -0,0 +1,97 @@
+Bug#: 74192
+Product: Mono: Runtime
+Version: 1.1
+OS: GNU/Linux [Other]
+OS Details: Gentoo kernel 2.6.10
+Status: NEW
+Resolution:
+Severity:
+Priority: Normal
+Component: remoting
+AssignedTo: mono-bugs@ximian.com
+ReportedBy: AndrewArnott@byu.edu
+QAContact: mono-bugs@ximian.com
+TargetMilestone: ---
+URL:
+Cc:
+Summary: Secondary AppDomain loaded assembly loses reference
+
+Description of Problem:
+A secondary AppDomain is created, an assembly is loaded into it, and an
+interface implementation is instantiated. Then although the reference to
+the interface instance is still valid, a NullReferenceException is thrown
+when used.
+
+
+Steps to reproduce the problem:
+1. Download (soon to be) attached file.
+2. Extract contents with "tar xvzf appdomainbug.tgz"
+3. Change directory to "appdomainbug"
+4. Run "make test"
+
+
+Actual Results:
+rm -f "./bin/BugTest.exe" 2> /dev/null
+rm -f "./bin/BugTest.exe.mdb" 2> /dev/null
+rm -f "./bin/plugins/plugin.dll" 2> /dev/null
+rm -f "./bin/plugins/plugin.dll.mdb" 2> /dev/null
+mkdir -p ./bin
+mcs -debug -out:./bin/BugTest.exe BugTest.cs PluginFinder.cs IPlugin.cs
+mkdir -p ./bin/plugins
+mcs -debug -r:./bin/BugTest.exe -target:library
+-out:./bin/plugins/plugin.dll plugin.cs
+rm -f ./bin/plugin.dll 2> /dev/null
+./bin/BugTest.exe
+Creating appdomain...
+Establishing AppDomain with ApplicationBase: /home/ala55/appdomainbug/bin
+and PrivateBinPath: /home/ala55/appdomainbug/bin/plugins
+Looking up assembly at /home/ala55/appdomainbug/bin/plugins/plugin.dll...
+Loading assembly and plugin...
+Looking for assembly with name: plugin, Culture=neutral
+Plugin loaded? True
+
+Unhandled Exception: System.NullReferenceException: Object reference not
+set to an instance of an object
+make: *** [test] Error 1
+
+
+Expected Results:
+When copying the build from Mono to a Windows machine and running from
+Microsoft .NET, these are the results:
+Creating appdomain...
+Establishing AppDomain with ApplicationBase: C:\temp\appdomainbug\bin\
+and PrivateBinPath: C:\temp\appdomainbug\bin\/plugins
+Looking up assembly at C:\temp\appdomainbug\bin\plugins/plugin.dll...
+Loading assembly and plugin...
+Looking for assembly with name: plugin, Version=0.0.0.0, Culture=neutral,
+Public
+KeyToken=null
+Plugin loaded? True
+Plugin name: some name
+Completed successfully.
+
+How often does this happen?
+Every time. (yay)
+
+Additional Information:
+I include a simplified test case of the bug I found when writing an app
+that is designed to search its bin/plugins folder for .dlls that implement
+its IPlugin interface. Whether compiled using csc or mcs, the assemblies
+run just fine under MS.NET and crash under mono. I have only run the mono
+runtime under Linux (not Windows) during these tests.
+
+The hosting app is in a /bin folder, and the plugins are in /bin/plugins.
+Every plugin has a reference to an assembly that is only found in the /bin
+folder (the app's exe -- or dll in my REAL case). The plugin is found, and
+loaded just fine. But as soon as it is accessed (to call an accessor
+method), mono throws an UNCATCHABLE NullReferenceException. So maybe there
+are TWO BUGS here: that NullRef. is thrown, and that it cannot be caught.
+
+Oddly, when I copy the bin/plugins/plugin.dll to bin/plugin.dll, everything
+works fine. This of course is not an acceptable permanent workaround.
+
+One additional test: "make testbin" (described below)
+"make testbin" Is the same as "make test", except that before running the
+test, the plugin.dll file is copied from the bin/plugins folder to bin.
+This mysteriously makes everything work under Mono. This step is NOT
+needed in Microsoft.NET.