You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2018/06/27 15:56:25 UTC

svn commit: r1834516 - /uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasImpl.java

Author: schor
Date: Wed Jun 27 15:56:25 2018
New Revision: 1834516

URL: http://svn.apache.org/viewvc?rev=1834516&view=rev
Log:
[UIMA-5801] clean up jcas hashmaps when class loader is closed

Modified:
    uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasImpl.java

Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasImpl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasImpl.java?rev=1834516&r1=1834515&r2=1834516&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasImpl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/impl/JCasImpl.java Wed Jun 27 15:56:25 2018
@@ -68,6 +68,7 @@ import org.apache.uima.cas.impl.LowLevel
 import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.cas.impl.TypeSystemImpl;
 import org.apache.uima.cas.text.AnnotationIndex;
+import org.apache.uima.internal.util.UIMAClassLoader;
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.JCasRegistry;
 import org.apache.uima.jcas.JFSIndexRepository;
@@ -1166,17 +1167,35 @@ public class JCasImpl extends AbstractCa
   public static void clearData(CAS cas) {
     JCasImpl jcas = (JCasImpl) ((CASImpl) cas).getExistingJCas();
     final JCasSharedView sv = jcas.sharedView;
+    sv.stringArray0L = null;
+    sv.floatArray0L = null;
+    sv.fsArray0L = null;
+    sv.integerArray0L = null;
+
+//    JCasHashMap currentMap = sv.cAddr2JfsByClassLoader.get(  ((CASImpl) cas).getJCasClassLoader()  );
     for (Iterator<Map.Entry<ClassLoader, JCasHashMap>> it = sv.cAddr2JfsByClassLoader.entrySet().iterator(); it.hasNext();) {
       Map.Entry<ClassLoader, JCasHashMap> e = it.next();
-      sv.cAddr2Jfs = e.getValue();
-      sv.cAddr2Jfs.clear();  // implements resize as well
-      sv.stringArray0L = null;
-      sv.floatArray0L = null;
-      sv.fsArray0L = null;
-      sv.integerArray0L = null;
+      e.getValue().clear();  // implements resize as well
+      ClassLoader cl = e.getKey();
+      JCasHashMap jcas_hashmap = e.getValue();
+      jcas_hashmap.clear();
+      if (cl instanceof UIMAClassLoader) {
+        if (((UIMAClassLoader) cl).isClosed()) {
+          it.remove();
+          if (sv.cAddr2Jfs == jcas_hashmap) {
+            sv.cAddr2Jfs = null;
+          }
+        }            
+      }
+      
+//      sv.cAddr2Jfs = e.getValue();
+//      sv.cAddr2Jfs.clear();  // implements resize as well
+//      if (! e.getValue().equals(currentMap)) {
+//        it.remove();
+//      }
     }
-    sv.cAddr2Jfs = sv.cAddr2JfsByClassLoader
-        .get(((CASImpl) cas).getJCasClassLoader());
+//    sv.cAddr2Jfs = sv.cAddr2JfsByClassLoader
+//        .get(((CASImpl) cas).getJCasClassLoader());
   }
 
   /*