> The code in question is pretty detailed, but the synchronization scheme
boils down to this: I have
> two overlapping (avoiding the word "interlocked") synchronized regions,
where I start, the first,
> start the second, exit the first, then exit the second, like this:
>
> object monitor1 = new object();
> object monitor2 = new object();
> lock (monitor1) {
>    // ...
>    lock (monitor2) {
>       Monitor.Exit(monitor1);
>       // ...
>    }
> }

Jeff, I think the exception is thrown at the exit of the lock(monitor1)
block.
You are certainly aware that lock() { } is a shorthand for
try { Monitor.Enter() ...}finally { Monitor.Exit() }.
It follows that monitor1 is in fact exited twice, which apparently .net
endures silently while Mono does not.
You really should not mix lock() and Monitor.Enter/Exit.

HTH,
--Jonathan

===================================
This list is hosted by DevelopMentorŪ  http://www.develop.com
NEW! ASP.NET courses you may be interested in:

2 Days of ASP.NET, 29 Sept 2003, in Redmond
http://www.develop.com/courses/2daspdotnet

Guerrilla ASP.NET, 13 Oct 2003, in Boston
http://www.develop.com/courses/gaspdotnet

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to