[Mono-dev] StackOverflow on System.Delegate.Equals

kralu at poczta.onet.pl kralu at poczta.onet.pl
Mon Apr 4 09:47:26 EDT 2011


W dniu 2011-03-30 22:07:45 użytkownik Miguel de Icaza <miguel at novell.com> napisał:

> While another one is doing an equality test, the state is half-built.
> The way you could instrument this is to rewrite that routine to not be
> recursive, but instead to be iterative, and have a maximum count,
> something like:
> 
> 	MulticastDelegate track_this = this;
> 	MulticastDelegate track_other = d;
> 
> 	for (int i = 0; i < 10000; i++){
> 		object this_prev = track_this.prev;
> 		object other_prev = d.prev;
> 
> 		if (this_prev != other_prev)
> 			return false;
> 	}
> 	if (i == 10000)
> 		Console.WriteLine ("The corrupted instance is {0}", this.GetType ());
> 
> 	return true;
 
Thanks for your reply. I'm not sure but it seems that your snippet will put a text on a screen always when the delegates are equal. Anyway, I've rewrote that routine as you suggested and here's the result: http://monobin.com/__mb1963e9 

I've also just added a lines like below to the end of original equals method. 

 	if (this == this.prev)
 		Console.WriteLine ("The corrupted instance is {0}", this.GetType ());
        return this.prev.Equals(d.prev);

...and I'm waiting for a crush. 
I'd appreciate any other hints or advices. Thanks in advance.
Best regards, 
Marcin 



More information about the Mono-devel-list mailing list