[ 
https://issues.apache.org/jira/browse/LUCENE-4280?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13427296#comment-13427296
 ] 

Robert Muir commented on LUCENE-4280:
-------------------------------------

Do we know if the problem happens from the method 'test' or from 
'testReaderChaining'?

here are my notes basically for 'test'. I think we could apply the same logic 
to 'testReaderChaining',
but I want Uwe's opinion:

{noformat}
@@ -65,6 +66,17 @@
       searcher.search(query, 5);
     } catch (AlreadyClosedException ace) {
       // expected
+    } finally {
+      // we may have wrapped the reader1 in newSearcher, meaning we created 
reader2(reader1)
+      // but we only closed the inner reader1, not the reader2 which is the 
one with the
+      // close hook to shut down the executor service.
+      //
+      // a better general solution is probably to fix 
LuceneTestCase.newSearcher to add 
+      // the close hook to the underlying reader that was passed in (reader1), 
however
+      // if we do that, is this test still just as good? we will get an 
exception from
+      // IndexSearcher instead?
+      IOUtils.close(searcher.getIndexReader());
     }
{noformat}

I think we need Uwe to review :)

                
> TestReaderClosed leaks threads
> ------------------------------
>
>                 Key: LUCENE-4280
>                 URL: https://issues.apache.org/jira/browse/LUCENE-4280
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Dawid Weiss
>            Assignee: Robert Muir
>            Priority: Minor
>
> {code}
> -ea
> -Dtests.seed=9449688B90185FA5
> -Dtests.iters=100
> {code}
> reproduces 100% for me, multiple thread leak out from newSearcher's internal 
> threadfactory:
> {code}
> Aug 02, 2012 8:46:05 AM com.carrotsearch.randomizedtesting.ThreadLeakControl 
> checkThreadLeaks
> SEVERE: 6 threads leaked from SUITE scope at 
> org.apache.lucene.index.TestReaderClosed: 
>    1) Thread[id=13, name=LuceneTestCase-1-thread-1, state=WAITING, 
> group=TGRP-TestReaderClosed]
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
>         at 
> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
>         at 
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>         at java.lang.Thread.run(Thread.java:722)
>    2) Thread[id=15, name=LuceneTestCase-3-thread-1, state=WAITING, 
> group=TGRP-TestReaderClosed]
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
>         at 
> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
>         at 
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>         at java.lang.Thread.run(Thread.java:722)
>    3) Thread[id=17, name=LuceneTestCase-5-thread-1, state=WAITING, 
> group=TGRP-TestReaderClosed]
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
>         at 
> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
>         at 
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>         at java.lang.Thread.run(Thread.java:722)
>    4) Thread[id=18, name=LuceneTestCase-6-thread-1, state=WAITING, 
> group=TGRP-TestReaderClosed]
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
>         at 
> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
>         at 
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>         at java.lang.Thread.run(Thread.java:722)
>    5) Thread[id=16, name=LuceneTestCase-4-thread-1, state=WAITING, 
> group=TGRP-TestReaderClosed]
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
>         at 
> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
>         at 
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>         at java.lang.Thread.run(Thread.java:722)
>    6) Thread[id=14, name=LuceneTestCase-2-thread-1, state=WAITING, 
> group=TGRP-TestReaderClosed]
>         at sun.misc.Unsafe.park(Native Method)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
>         at 
> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
>         at 
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>         at java.lang.Thread.run(Thread.java:722)
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to