[Mono-dev] StackOverflow on System.Delegate.Equals
Miguel de Icaza
miguel at novell.com
Wed Mar 30 16:04:45 EDT 2011
> I've found an issue in my ASP.NET application when it's running under heavy
> load. It throws an exception like that: http://pastebin.com/DRAYVM0F and
> then the whole application is down, i've to restart apache/mod-mono-server.
> It's running under mono 2.10.1, apache2 and mod-mono. On IIS/MS.NET i've not
> found any problems, even on heavier load. Maybe someone has any
> thoughts/ideas what might causing problem like this? Thanks in advance.
What could be happening is that the event is being accessed in a thread
unsafe way, and the internals of the delegate are in a state of flux by
the time the invocation for equals takes place.
So one thread is doing:
foo += bar
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;
That will tell you the type that is getting corrupted. It will help
determine if this is a bug in Mono, or your code.
Miguel
More information about the Mono-devel-list
mailing list