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 [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=78633 --- shadow/78633 2006-06-13 12:27:11.000000000 -0400 +++ shadow/78633.tmp.13049 2006-06-13 12:27:11.000000000 -0400 @@ -0,0 +1,122 @@ +Bug#: 78633 +Product: Mono: Runtime +Version: 1.1 +OS: other +OS Details: CentOS 4 +Status: RESOLVED +Resolution: FIXED +Severity: Unknown +Priority: Critical +Component: misc +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Cc: +Summary: Serious bug in lock - locks not unlocked on exception + +Please fill in this template when reporting a bug, unless you know what +you are doing. +Description of Problem: + +It is possible to execute code which throws an Exception inside a lock +statement which exits the statement without releasing the lock. +Steps to reproduce the problem: +1. Compile attached code with mcs -codepage:1252 -optimize- -delaysign- - +target:winexe -r:"System.dll" -r:"System.Data.dll" Test.cs + +2. Run with mono Test.exe + +Actual Results: +Error thread initial sleep +Main thread initial sleep +Returning null from NextError +Trying +Trying to lock error -1090733248 +Returning null from NextError +Returning null from NextError +Returning null from NextError +Returning null from NextError +Returning null from NextError +Returning null from NextError +Returning null from NextError +Returning null from NextError +Returning null from NextError +Error thread exiting +[program now hangs forever, waiting for the lock] + +Expected Results: +Main thread obtains lock and program exits normally. + +How often does this happen? +Every time + +Additional Information: +Here is the code to reproduce the problem... + +using System; +using System.Threading; + +namespace SpecSoft.Lib { + + public class Test { + + private static Object _error = new Object(); + + public static void Main() { + Thread _errorThread = new Thread(new ThreadStart +(errorThread)); + + _errorThread.IsBackground = true; + _errorThread.Name = "Error reporting thread"; + _errorThread.Start(); + System.Console.WriteLine("Main thread initial +sleep"); + Thread.Sleep(2000); + System.Console.WriteLine("Trying"); + System.Console.WriteLine("Trying to lock error +{0}", _error.GetHashCode()); + lock(_error) { + System.Console.WriteLine("Locked error"); + } + System.Console.WriteLine("Unlocked error"); + } + + private static void errorThread() { + System.Console.WriteLine("Error thread initial +sleep"); + Thread.Sleep(1000); + for(int i = 0; i < 10; i++) { + NextError(); + Thread.Sleep(1000); + } + System.Console.WriteLine("Error thread exiting"); + } + + public static string NextError() { + try { + lock(_error) { + string [] files = new string[1]; + + return files[2]; + // Throws an exception + } + } catch { + } + System.Console.WriteLine("Returning null from +NextError"); + return null; + } + + } +} + +------- Additional Comments From [EMAIL PROTECTED] 2006-06-13 10:44 ------- +The problem goes away if you change the empty catch statement in +NextError from "} catch {" to "} catch(Exception ex) {", so maybe +the bug is in the compiler? + +------- Additional Comments From [EMAIL PROTECTED] 2006-06-13 12:27 ------- +Fixed in SVN. + _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
