On Thu, 2003-12-18 at 07:56, Ceki GÃlcà wrote: > >class State { > > Logger log; > > > > synchronized void setState() { > > // Something takes a long time here > > log.debug("hello world"); > > } > > > > synchronized Object getState() { > > } > > > > public String toString() { > > return "state=" + getState(); > > } > >} > > The above scenario is quite special. It is yet unclear if the deadlock > observed by Prithi is related.
Well, that's the sort of scenario that I have run into, under load while having debugging on. I have run into it under JBoss with the JBoss classloader. I have run into it in a open source library. If you are doing any sort of multi-threaded programming with logging under multiple threads, I have been able to reproduce this deadlock every time. If you don't plan to fix this issue, you should at least make a note about the problem. Here's a program which will reproduce the deadlock. There is nothing special about this program: import org.apache.log4j.Logger; public class Deadlock { static final Logger log = Logger.getLogger(Deadlock.class); String var; public synchronized void setVar(String var) { log.debug(this); } public synchronized String getVar() { return var; } public String toString() { return "Value x=" + getVar(); } public static void main(String args[]) throws Exception { final Deadlock d = new Deadlock(); new Thread() { public void run() { while (true) log.debug(d); } }.start(); new Thread() { public void run() { while (true) d.setVar("n"); } }.start(); } } You also need this log4j.properties file: # Log4j configuration for unit tests log4j.rootCategory=debug, R log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=deadlock.log log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p (%C:%M) - %m%n --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]