Ejemplo n.º 1
0
 private boolean hasRefHolder(String oid, Type type) {
   synchronized (refHolders) {
     LinkedList<RefHolder> l = refHolders.get(oid);
     if (l != null) {
       for (RefHolder rh : l) {
         if (type.isSupertypeOf(rh.getType())) {
           return true;
         }
       }
     }
   }
   return false;
 }
Ejemplo n.º 2
0
 final void freeHolders() {
   synchronized (refHolders) {
     for (Iterator<Map.Entry<String, LinkedList<RefHolder>>> i1 = refHolders.entrySet().iterator();
         i1.hasNext(); ) {
       Map.Entry<String, LinkedList<RefHolder>> e = i1.next();
       String oid = e.getKey();
       LinkedList<RefHolder> l = e.getValue();
       for (Iterator<RefHolder> i2 = l.iterator(); i2.hasNext(); ) {
         RefHolder rh = i2.next();
         for (boolean done = false; !done; ) {
           done = rh.release();
           _java_environment.revokeInterface(oid, rh.getType());
           release();
         }
       }
     }
     refHolders.clear();
   }
 }
Ejemplo n.º 3
0
 final void addRefHolder(Object obj, Type type, String oid) {
   synchronized (refHolders) {
     LinkedList<RefHolder> l = refHolders.get(oid);
     if (l == null) {
       l = new LinkedList<RefHolder>();
       refHolders.put(oid, l);
     }
     boolean found = false;
     for (Iterator<RefHolder> i = l.iterator(); !found && i.hasNext(); ) {
       RefHolder rh = i.next();
       if (rh.getType().equals(type)) {
         found = true;
         rh.acquire();
       }
     }
     if (!found) {
       l.add(new RefHolder(type, obj));
     }
   }
   acquire();
 }
Ejemplo n.º 4
0
 final void remRefHolder(Type type, String oid) {
   synchronized (refHolders) {
     LinkedList<RefHolder> l = refHolders.get(oid);
     if (l == null) {
       return;
     }
     for (RefHolder rh : l) {
       if (rh.getType().equals(type)) {
         try {
           if (rh.release()) {
             l.remove(rh);
             if (l.isEmpty()) {
               refHolders.remove(oid);
             }
           }
         } finally {
           release();
         }
         break;
       }
     }
   }
 }