[Mono-bugs] [Bug 77494][Maj] New - Mono runtime after 1.1.8.x goes
into infinite recursion when accessing virtual override property.
bugzilla-daemon at bugzilla.ximian.com
bugzilla-daemon at bugzilla.ximian.com
Tue Feb 7 15:29:14 EST 2006
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 mwickline at maad.com.
http://bugzilla.ximian.com/show_bug.cgi?id=77494
--- shadow/77494 2006-02-07 15:29:14.000000000 -0500
+++ shadow/77494.tmp.31025 2006-02-07 15:29:14.000000000 -0500
@@ -0,0 +1,211 @@
+Bug#: 77494
+Product: Mono: Runtime
+Version: 1.1
+OS: Mandrake 9.0
+OS Details: x86, glibc 2.2.5
+Status: NEW
+Resolution:
+Severity:
+Priority: Major
+Component: JIT
+AssignedTo: lupus at ximian.com
+ReportedBy: mwickline at maad.com
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL:
+Cc:
+Summary: Mono runtime after 1.1.8.x goes into infinite recursion when accessing virtual override property.
+
+Please fill in this template when reporting a bug, unless you know what you
+are doing.
+Description of Problem:
+The mono runtime after version 1.1.8.x goes into an infinite recursion (and
+crashes with seg fault) when accessing a public property that overrides an
+ancestor class property. The code itself should never produce infinite
+recursion (and doesn't on Microsoft .NET 1.1, nor on Mono 1.1.8.x). My
+apologies, for not having a smaller test case to exhibit the problem.
+
+Steps to reproduce the problem:
+1. Using the test case given, under mono 1.1.12.1 (for example) run:
+ mono --trace=T:MAAD.IPME.Common.IPMEPreferences TestSMG.exe
+
+Actual Results:
+You will see that accessing the IPMEPreferences.StartID public property
+(eventually, like after 15-20 seconds on slow machines) produces an
+infinite recursion:
+
+ENTER: MAAD.IPME.Common.IPMEPreferences:GetSerializer
+(MAAD.IPME.Schedulers.ISchedulerCapable)([MAAD.IPME.SimEngine.MicroSaintSimulationApplication:0x837aea0],
+)
+LEAVE: MAAD.IPME.Common.IPMEPreferences:GetSerializer
+(MAAD.IPME.Schedulers.ISchedulerCapable)[System.Xml.Serialization.XmlSerializer:0x84c4fa0]
+ENTER: MAAD.IPME.Common.IPMEPreferences:.ctor
+()(this:0x8645d68[MAAD.IPME.Common.IPMEPreferences TestSMG.exe], )
+. ENTER: MAAD.IPME.Common.IPMEPreferences:set_StartID
+(string)(this:0x8645d68[MAAD.IPME.Common.IPMEPreferences TestSMG.exe],
+[STRING:0x8273f80:1], )
+. . ENTER: MAAD.IPME.Common.IPMEPreferences:get_StartID
+()(this:0x8645d68[MAAD.IPME.Common.IPMEPreferences TestSMG.exe], )
+. . . ENTER: MAAD.IPME.Common.IPMEPreferences:get_StartID
+()(this:0x8645d68[MAAD.IPME.Common.IPMEPreferences TestSMG.exe], )
+. . . . ENTER: MAAD.IPME.Common.IPMEPreferences:get_StartID
+()(this:0x8645d68[MAAD.IPME.Common.IPMEPreferences TestSMG.exe], )
+. . . . . ENTER: MAAD.IPME.Common.IPMEPreferences:get_StartID
+()(this:0x8645d68[MAAD.IPME.Common.IPMEPreferences TestSMG.exe], )
+. . . . . . ENTER: MAAD.IPME.Common.IPMEPreferences:get_StartID
+()(this:0x8645d68[MAAD.IPME.Common.IPMEPreferences TestSMG.exe], )
+. . . . . . . ENTER: MAAD.IPME.Common.IPMEPreferences:get_StartID
+()(this:0x8645d68[MAAD.IPME.Common.IPMEPreferences TestSMG.exe], )
+And so on...
+
+
+Expected Results:
+Under mono 1.1.8.0 it produces the correct result:
+
+ENTER: MAAD.IPME.Common.IPMEPreferences:GetSerializer
+(MAAD.IPME.Schedulers.ISchedulerCapable)([MAAD.IPME.SimEngine.MicroSaintSimulationApplication:0x8383ea0],
+)
+LEAVE: MAAD.IPME.Common.IPMEPreferences:GetSerializer
+(MAAD.IPME.Schedulers.ISchedulerCapable)[System.Xml.Serialization.XmlSerializer:0x856efa0]
+ENTER: MAAD.IPME.Common.IPMEPreferences:.ctor
+()(this:0x8383c30[MAAD.IPME.Common.IPMEPreferences TestSMG.exe], )
+. ENTER: MAAD.IPME.Common.IPMEPreferences:set_StartID
+(string)(this:0x8383c30[MAAD.IPME.Common.IPMEPreferences TestSMG.exe],
+[STRING:0x8262f80:1], )
+. . ENTER: MAAD.IPME.Common.IPMEPreferences:get_StartID
+()(this:0x8383c30[MAAD.IPME.Common.IPMEPreferences TestSMG.exe], )
+. . LEAVE: MAAD.IPME.Common.IPMEPreferences:get_StartID ()[STRING:null],
+. LEAVE: MAAD.IPME.Common.IPMEPreferences:set_StartID (string)
+LEAVE: MAAD.IPME.Common.IPMEPreferences:.ctor ()
+ENTER: MAAD.IPME.Common.IPMEPreferences:set_StartID
+(string)(this:0x8383c30[MAAD.IPME.Common.IPMEPreferences TestSMG.exe],
+[STRING:0x83a3940:1], )
+. ENTER: MAAD.IPME.Common.IPMEPreferences:get_StartID
+()(this:0x8383c30[MAAD.IPME.Common.IPMEPreferences TestSMG.exe], )
+. LEAVE: MAAD.IPME.Common.IPMEPreferences:get_StartID ()[STRING:0x8262f80:1]
+LEAVE: MAAD.IPME.Common.IPMEPreferences:set_StartID (string)
+ENTER: MAAD.IPME.Common.IPMEPreferences:set_MissionTimeLimit
+(double)(this:0x8383c30[MAAD.IPME.Common.IPMEPreferences TestSMG.exe],
+0.000000, )
+And so on, until it eventually completes with the message:
+Simulation Complete - 0.25 seconds.
+
+
+How often does this happen?
+Always.
+
+Additional Information:
+These assemblies were compiled under Visual Studio .NET 2003, using
+Microsoft's .NET 1.1 C# compiler.
+The class heirarchy, and assemblies containing the classes, look like:
+
+class MAAD.IPME.Common.IPMEPreferences in assembly IPME.Common.dll
+
+ [ Serializable(),
+ XmlRoot("IPMEPreferences")
+ ]
+ public class IPMEPreferences : MAAD.Network.Preferences
+ {
+
+ [ XmlAttribute() ]
+ public override string StartID
+ {
+ get
+ {
+ if(base.StartID != null && IDDelimiter != null)
+ return base.StartID.Replace(IDDelimiter, "_");
+ return base.StartID;
+ }
+ set
+ {
+ // NOTE: IDDelimiter may be undefined here during the XML deserialization,
+ // so we have to do the replacement in the getter.
+ base.StartID = value;
+ }
+ }
+ }
+
+class MAAD.Network.Preferences in assembly MAAD.Network.dll
+
+
+ [
+ DisplayAttribute(ImageNumber = 4, Name = "Execution Settings"),
+ Serializable()
+ ]
+ public class Preferences : DefaultPreferences, IPreferences
+ {
+ private string idDelimiter;
+
+ public Preferences()
+ {
+ IDDelimiter = "_";
+ }
+
+ [
+ Browsable(false),
+ XmlAttribute()
+ ]
+ public virtual string IDDelimiter
+ {
+ get { return idDelimiter; }
+ set
+ {
+ OldValue = IDDelimiter;
+ idDelimiter = value;
+ LaunchChangedEvent(EChanged.DataEdited, "IDDelimiter", OldValue);
+ }
+ }
+
+ }
+
+class MAAD.Utilities.Document.DefaultPreferences in assembly MAAD.Utilities.dll
+
+ [Serializable()]
+ public class DefaultPreferences : DefaultEditable, ISettings
+ {
+ private string startID;
+ public DefaultPreferences()
+ {
+ StartID = "1";
+ }
+
+ [
+ XmlAttribute(),
+ SearchableAttribute(),
+ Description("The ID of the start task in the network.")
+ ]
+ public virtual string StartID
+ {
+ get { return startID; }
+ set
+ {
+ OldValue = StartID;
+ startID = value;
+ LaunchChangedEvent(EChanged.DataEdited, "StartID", OldValue);
+ }
+ }
+ }
+
+class MAAD.Utilities.DefaultEditable in assembly MAAD.Utilities.dll
+
+ [Serializable()]
+ public abstract class DefaultEditable : DefaultLightEditable, IEditable,
+ICustomTypeDescriptor, IEditOperationsID, IUndoEventsHelper
+ {
+ [NonSerialized()] private object oldValue;
+ public DefaultEditable()
+ {
+ OldValue = null;
+ }
+
+ [
+ Browsable(false),
+ XmlIgnore(),
+ DisplayIntelliPromptAttribute(false)
+ ]
+ protected object OldValue
+ {
+ get { return oldValue; }
+ set { oldValue = value; }
+ }
+ }
More information about the mono-bugs
mailing list