This can in fact result in deadlock; you should sync on your own Object instead.
Mike On Tue, Jul 28, 2009 at 12:27 AM, Chengdu Huang<chengdu.hu...@patterninsight.com> wrote: > Hi, > > I have an application in which documents are added upon receiving a > user request and a background thread is needed to remove old > documents. I have an IndexWriter opened on a Directory that adds > documents and commits but never closes. The background thread that > removes documents uses the same instance of IndexWriter. So the code > looks like > > // Thread to add document: > synchronized(writer) { > try { > Document doc = new Document(); > doc.add(); > ... > writer.commit(); > } catch (Exception e) { > writer.rollback(); > } > } > > Now looks like I run into some kind of deadlock here even *WITHOUT* > the background thread of removing documents. The symptom is that the > whole java process is on sleeping state and jstack shows that the > thread to add document is blocked on waiting an object. Unfortunately > I'm unable to reproduce this in unittests. > > My guess is that the outer synchronized(writer) {} block is causing > the problem, but can't figure out why. Any idea? > > Chengdu > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org > For additional commands, e-mail: java-user-h...@lucene.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org