Print this page


Split Close
Expand all
Collapse all
          --- old/src/share/classes/sun/rmi/transport/Target.java
          +++ new/src/share/classes/sun/rmi/transport/Target.java
↓ open down ↓ 45 lines elided ↑ open up ↑
  46   46      private final ObjID id;
  47   47      /** flag indicating whether target is subject to collection */
  48   48      private final boolean permanent;
  49   49      /** weak reference to remote object implementation */
  50   50      private final WeakRef weakImpl;
  51   51      /** dispatcher for remote object */
  52   52      private volatile Dispatcher disp;
  53   53      /** stub for remote object */
  54   54      private final Remote stub;
  55   55      /** set of clients that hold references to this target */
  56      -    private final Vector refSet = new Vector();
       56 +    private final Vector<VMID> refSet = new Vector<>();
  57   57      /** table that maps client endpoints to sequence numbers */
  58      -    private final Hashtable sequenceTable = new Hashtable(5);
       58 +    private final Hashtable<VMID, SequenceEntry> sequenceTable =
       59 +        new Hashtable<>(5);
  59   60      /** access control context in which target was created */
  60   61      private final AccessControlContext acc;
  61   62      /** context class loader in which target was created */
  62   63      private final ClassLoader ccl;
  63   64      /** number of pending/executing calls */
  64   65      private int callCount = 0;
  65   66      /** true if this target has been removed from the object table */
  66   67      private boolean removed = false;
  67   68      /**
  68   69       * the transport through which this target was exported and
↓ open down ↓ 165 lines elided ↑ open up ↑
 234  235          }
 235  236      }
 236  237  
 237  238      /**
 238  239       * Add an endpoint to the remembered set.  Also adds a notifier
 239  240       * to call back if the address space associated with the endpoint
 240  241       * dies.
 241  242       */
 242  243      synchronized void referenced(long sequenceNum, VMID vmid) {
 243  244          // check sequence number for vmid
 244      -        SequenceEntry entry = (SequenceEntry) sequenceTable.get(vmid);
      245 +        SequenceEntry entry = sequenceTable.get(vmid);
 245  246          if (entry == null) {
 246  247              sequenceTable.put(vmid, new SequenceEntry(sequenceNum));
 247  248          } else if (entry.sequenceNum < sequenceNum) {
 248  249              entry.update(sequenceNum);
 249  250          } else  {
 250  251              // late dirty call; ignore.
 251  252              return;
 252  253          }
 253  254  
 254  255          if (!refSet.contains(vmid)) {
↓ open down ↓ 18 lines elided ↑ open up ↑
 273  274          }
 274  275      }
 275  276  
 276  277      /**
 277  278       * Remove endpoint from remembered set.  If set becomes empty,
 278  279       * remove server from Transport's object table.
 279  280       */
 280  281      synchronized void unreferenced(long sequenceNum, VMID vmid, boolean strong)
 281  282      {
 282  283          // check sequence number for vmid
 283      -        SequenceEntry entry = (SequenceEntry) sequenceTable.get(vmid);
      284 +        SequenceEntry entry = sequenceTable.get(vmid);
 284  285          if (entry == null || entry.sequenceNum > sequenceNum) {
 285  286              // late clean call; ignore
 286  287              return;
 287  288          } else if (strong) {
 288  289              // strong clean call; retain sequenceNum
 289  290              entry.retain(sequenceNum);
 290  291          } else if (entry.keep == false) {
 291  292              // get rid of sequence number
 292  293              sequenceTable.remove(vmid);
 293  294          }
↓ open down ↓ 65 lines elided ↑ open up ↑
 359  360  
 360  361          if ((force == true) || (callCount == 0) || (disp == null)) {
 361  362              disp = null;
 362  363              /*
 363  364               * Fix for 4331349: unpin object so that it may be gc'd.
 364  365               * Also, unregister all vmids referencing this target
 365  366               * so target can be gc'd.
 366  367               */
 367  368              unpinImpl();
 368  369              DGCImpl dgc = DGCImpl.getDGCImpl();
 369      -            Enumeration enum_ = refSet.elements();
      370 +            Enumeration<VMID> enum_ = refSet.elements();
 370  371              while (enum_.hasMoreElements()) {
 371      -                VMID vmid = (VMID) enum_.nextElement();
      372 +                VMID vmid = enum_.nextElement();
 372  373                  dgc.unregisterTarget(vmid, this);
 373  374              }
 374  375              return true;
 375  376          } else {
 376  377              return false;
 377  378          }
 378  379      }
 379  380  
 380  381      /**
 381  382       * Mark this target as having been removed from the object table.
↓ open down ↓ 90 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX