Author: schor Date: Sat Apr 26 11:39:17 2014 New Revision: 1590227 URL: http://svn.apache.org/r1590227 Log: [UIMA-3774] handle case of table resize while waiting slightly better
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasHashMap.java Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasHashMap.java URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasHashMap.java?rev=1590227&r1=1590226&r2=1590227&view=diff ============================================================================== --- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasHashMap.java (original) +++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasHashMap.java Sat Apr 26 11:39:17 2014 @@ -204,13 +204,16 @@ public class JCasHashMap { while (((TOP) maybe).jcasType == null) { // we hit a reserve marker - there is another thread in the process of creating an instance of this, // so wait for it to finish and then return it + final int sizeNow = size; try { wait(); // releases the synchronized monitor, otherwise this segment blocked for others while waiting } catch (InterruptedException e) { } - // at this point, the table may have grown - // so start over - continue retryAfterWait; + if (size != sizeNow) { + // at this point, the table may have grown + // so start over + continue retryAfterWait; + } } if (TUNE) { histogram[Math.min(histogram.length - 1, nbrProbes)]++;