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; }
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(); } }
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(); }
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; } } } }