TestIndexWriter.TestThreadInterruptDeadlock -------------------------------------------
Key: LUCENENET-308 URL: https://issues.apache.org/jira/browse/LUCENENET-308 Project: Lucene.Net Issue Type: Bug Reporter: Andrei Iliev 2 problems with the test: 1) There is no .Net equivalent for java's java.lang.Thread.interrupted() and interrupted bit => we can not check if IW restored interrupted bit (there is no such bit). 2) Sometimes test fails with exception: An unhandled System.NullReferenceException was thrown while executing this test : Object reference not set to an instance of an object. In seems that in java statement "synchronized(this) " will never throw an InterruptedException but in .Net statement lock(this) can throw such exception. Because of this the inner exception sometimes will be null => cause System.NullReferenceException exception. Here's a snippet of code from the ConcurrentMergeScheduler ============= lock (this) // (1) { MergeThread merger; while (MergeThreadCount() >= maxThreadCount) { if (Verbose()) Message(" too many merge threads running; stalling..."); try { System.Threading.Monitor.Wait(this); // (2) } catch (System.Threading.ThreadInterruptedException ie) { // In 3.0 we will change this to throw // InterruptedException instead SupportClass.ThreadClass.Current().Interrupt(); throw new System.SystemException(ie.Message, ie); } } ============= In java ThreadInterruptedException can be thrown only in position (2). But in .Net it can be at postion (1) as well. I choose the easiest fix: check not only inner exception but the exception as well if(re is System.Threading.ThreadInterruptedException || e is System.Threading.ThreadInterruptedException) As alternative we have to fix many places in ConcurrentMergeScheduler by -finding lock(this), -add try , and catch blocks in the following way: catch (System.Threading.ThreadInterruptedException ie) { // In 3.0 we will change this to throw // InterruptedException instead SupportClass.ThreadClass.Current().Interrupt(); throw new System.SystemException(ie.Message, ie); } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.