[ nice-Bugs-1090881 ] IllegalMonitorStateException
"SourceForge.net" <[email protected]> Mon, 07 Feb 2005 09:16:03 -0800
| Newsgroups | gmane.comp.lang.nice.devel |
|---|---|
| Message-ID | <[email protected]> |
Bugs item #1090881, was opened at 2004-12-24 17:11
Message generated for change (Comment added) made by bonniot
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=112788&aid=1090881&group_id=12788
Category: None
Group: None
>Status: Closed
>Resolution: Fixed
Priority: 5
Submitted By: Artem Gr Kozarezov (artemgr)
>Assigned to: Daniel Bonniot (bonniot)
Summary: IllegalMonitorStateException
Initial Comment:
The following program:
void main( String[] ){
List<Integer> list = new LinkedList();
int n = 9;
while( 0 != --n ) list.add( new Integer( n ) );
while( true ){
synchronized( list ){
if( list.isEmpty() ) break;
list.removeAt( 0 );
}
}
println( "OK" );
}
prints
OK
Exception in thread "main"
java.lang.IllegalMonitorStateException
at sync.fun.main(sync.nice:9)
at sync.dispatch.main(dispatch.nice)
It's strange also to see "OK". In real application the
thread of control was interrupted (jumped to the
appropriate catch block).
It is possible to workaround this bug, by moving
"break" outside of the "synchronized" block.
nicec --version
Nice compiler version 0.9.10 prerelease (build
2004.12.07, 13:42:26 UTC)
Compiled using JDK 1.4.2-01
java version "1.4.2_04"
Java(TM) 2 Runtime Environment, Standard Edition (build
1.4.2_04-b05)
Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)
The similar Java program (see below) works without
exceptions:
import java.util.*;
public class test {
public static void main( String[] argv ){
List list = new LinkedList();
int n = 9;
while( 0 != --n ) list.add( new Integer( n ) );
while( true ){
synchronized( list ){
if( list.isEmpty() ) break;
list.remove( 0 );
}
}
System.out.println( "OK" );
}
}
----------------------------------------------------------------------
Comment By: Daniel Bonniot (bonniot)
Date: 2005-02-07 18:16
Message:
Logged In: YES
user_id=88952
This bug has been fixed. The next release of the compiler will
include this correction. In the mean time, I encourage you try
the development version. It contains a version of the compiler
that fixes the bug. Please try it and reopen the bug-report if
you find any problem with it.
To know how to get an install the development version of the
compiler that fixes this bug, please read
http://nice.sf.net/cgi-bin/twiki/view/Dev/DevelopmentVersion
Note that the bug has first been fixed in the CVS version, and it
might take one or two hours until the development version
includes the fix.
Thanks again for your help by submiting this bug report.
Daniel Bonniot
----------------------------------------------------------------------
Comment By: Artem Gr Kozarezov (artemgr)
Date: 2005-02-07 16:02
Message:
Logged In: YES
user_id=289741
The last followup is for another bug, sorry.
----------------------------------------------------------------------
Comment By: Artem Gr Kozarezov (artemgr)
Date: 2005-02-07 15:53
Message:
Logged In: YES
user_id=289741
A smaller test case:
<pre>
class AssertCaseFail {
void?->void _aFirstPointer = null;
void?->void _aSecondPointer = null;
void aMethod(){
let void->void fun;
let first = _aFirstPointer; let second = _aSecondPointer;
if( null != first ) fun = first;
else if( null != second ) fun = second;
else assert false;
fun();
}
}
void main( String[] ) = ( new AssertCaseFail() ).aMethod();
</pre>
It seems the current CVS have already some patch against it.
Stable Nice version says (when executing the code under
1.4.2_06):
Exception in thread "main" java.lang.VerifyError: (class:
letfun/c/fun, method: aMethod signature:
(Lletfun/c/AssertCaseFail;
)V) Register 1 contains wrong type
at letfun.c.dispatch.main(dispatch.nice)
But current CVS snapshot (build 2005.02.07) says:
Exception in thread "main" nice.lang.AssertionFailed
at letfun.c.fun.aMethod(c.nice:11)
at letfun.c.AssertCaseFail.aMethod(c.nice)
at letfun.c.fun.main(c.nice:16)
at letfun.c.dispatch.main(dispatch.nice)
----------------------------------------------------------------------
Comment By: Arjan Boeijink (arjanb)
Date: 2004-12-28 16:41
Message:
Logged In: YES
user_id=688815
'continue' has the same problem.
----------------------------------------------------------------------
Comment By: Artem Gr Kozarezov (artemgr)
Date: 2004-12-24 18:23
Message:
Logged In: YES
user_id=289741
What about "continue"? Is it safe to use?
----------------------------------------------------------------------
Comment By: Arjan Boeijink (arjanb)
Date: 2004-12-24 17:21
Message:
Logged In: YES
user_id=688815
This is a known bug in the codegenerator.
It doesn't handle breaking out a try-finally or synchronized
block correctly.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=112788&aid=1090881&group_id=12788
-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl