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

Reply via email to