lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Kohlschütter (JIRA) <>
Subject [jira] Created: (LUCENE-1186) [PATCH] Clear ThreadLocal instances in close()
Date Fri, 22 Feb 2008 10:56:19 GMT
[PATCH] Clear ThreadLocal instances in close()

                 Key: LUCENE-1186
             Project: Lucene - Java
          Issue Type: Improvement
    Affects Versions: 2.3, 2.3.1, 2.4
         Environment: any
            Reporter: Christian Kohlschütter
            Priority: Minor
         Attachments: LUCENE-1186-SegmentReader.patch

As already found out in LUCENE-436, there seems to be a garbage collection problem with ThreadLocals
at certain constellations, resulting in an OutOfMemoryError.
The resolution there was to remove the reference to the ThreadLocal value when calling the
close() method of the affected classes (see FieldsReader and TermInfosReader).
For Java < 5.0, this can effectively be done by calling threadLocal.set(null); for Java
>= 5.0, we would call threadLocal.remove()

Analogously, this should be done in *any* class which creates ThreadLocal values

Right now, two classes of the core API make use of ThreadLocals, but do not properly remove
their references to the ThreadLocal value
1. org.apache.lucene.index.SegmentReader
2. org.apache.lucene.analysis.Analyzer

For SegmentReader, I have attached a simple patch.
For Analyzer, there currently is no patch because Analyzer does not provide a close() method
(future to-do?)

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message