home *** CD-ROM | disk | FTP | other *** search
- package sun.rmi.transport;
-
- import java.rmi.RemoteException;
- import java.rmi.dgc.DGC;
- import java.rmi.dgc.Lease;
- import java.rmi.dgc.VMID;
- import java.rmi.server.LogStream;
- import java.rmi.server.ObjID;
- import java.rmi.server.RemoteServer;
- import java.rmi.server.RemoteStub;
- import java.rmi.server.ServerNotActiveException;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import sun.rmi.server.UnicastServerRef;
-
- final class DGCImpl implements DGC {
- static int logLevel = LogStream.parseLevel(Utils.getProperty("sun.rmi.dgc.logLevel"));
- static final long leaseCheckInterval = Utils.getLong("sun.rmi.dgc.checkInterval", 300000L);
- private static ObjID dgcID;
- private static DGCImpl dgc;
- private Hashtable leaseTable = new Hashtable();
- private Thread checker;
-
- static DGCImpl getDGCImpl() {
- return dgc;
- }
-
- private DGCImpl() {
- }
-
- public Lease dirty(ObjID[] var1, long var2, Lease var4) {
- VMID var5 = var4.getVMID();
- long var6 = var4.getValue();
- if (logLevel >= 20) {
- LogStream.log("dgc").println("DGCImpl.dirty: vmid = " + var5);
- }
-
- if (var5 == null) {
- var4 = new Lease(var5 = new VMID(), var6);
- if (logLevel >= 10) {
- String var8;
- try {
- var8 = RemoteServer.getClientHost();
- } catch (ServerNotActiveException var14) {
- var8 = "<unknown host>";
- }
-
- LogStream.log("dgc").println("DGCImpl.dirty: assigning vmid " + var5 + " to client " + var8);
- }
- }
-
- Hashtable var15 = this.leaseTable;
- synchronized(var15){}
-
- try {
- LeaseInfo var10 = (LeaseInfo)this.leaseTable.get(var5);
- if (var10 == null) {
- this.leaseTable.put(var5, new LeaseInfo(var5, var6));
- if (this.checker == null) {
- this.checker = RMIThread.newThread(new LeaseChecker(), "LeaseChecker", true);
- this.checker.start();
- }
- } else {
- var10.renew(var6);
- }
- } catch (Throwable var13) {
- throw var13;
- }
-
- for(int var16 = 0; var16 < var1.length; ++var16) {
- if (logLevel >= 20) {
- LogStream.log("dgc").println("DGCImpl.dirty: id = " + var1[var16] + ", vmid = " + var5 + ", duration = " + var6);
- }
-
- ObjectTable.referenced(var1[var16], var2, var5);
- }
-
- return var4;
- }
-
- public void clean(ObjID[] var1, long var2, VMID var4, boolean var5) {
- for(int var6 = 0; var6 < var1.length; ++var6) {
- if (logLevel >= 20) {
- LogStream.log("dgc").println("DGCImpl.clean: id = " + var1[var6] + ", vmid = " + var4 + ", strong = " + var5);
- }
-
- ObjectTable.unreferenced(var1[var6], var2, var4, var5);
- }
-
- }
-
- void registerTarget(VMID var1, Target var2) {
- Hashtable var3 = this.leaseTable;
- synchronized(var3){}
-
- try {
- LeaseInfo var5 = (LeaseInfo)this.leaseTable.get(var1);
- if (var5 == null) {
- var2.vmidDead(var1);
- } else if (!var5.notifyList.contains(var2)) {
- var5.notifyList.addElement(var2);
- }
- } catch (Throwable var7) {
- throw var7;
- }
-
- }
-
- void unregisterTarget(VMID var1, Target var2) {
- Hashtable var3 = this.leaseTable;
- synchronized(var3){}
-
- try {
- LeaseInfo var5 = (LeaseInfo)this.leaseTable.get(var1);
- if (var5 != null) {
- var5.notifyList.removeElement(var2);
- }
- } catch (Throwable var7) {
- throw var7;
- }
-
- }
-
- boolean checkLeases() {
- long var1 = System.currentTimeMillis();
- Hashtable var4 = this.leaseTable;
- synchronized(var4){}
-
- boolean var3;
- try {
- Enumeration var6 = this.leaseTable.elements();
-
- while(var6.hasMoreElements()) {
- LeaseInfo var7 = (LeaseInfo)var6.nextElement();
- if (var7.expired(var1)) {
- this.leaseTable.remove(var7);
- }
- }
-
- if (!this.leaseTable.isEmpty()) {
- var3 = true;
- return var3;
- }
-
- this.checker = null;
- var3 = false;
- } catch (Throwable var9) {
- throw var9;
- }
-
- return var3;
- }
-
- static ObjID getID() {
- return dgcID;
- }
-
- static {
- try {
- dgc = new DGCImpl();
- dgcID = new ObjID(2);
- LiveRef var0 = new LiveRef(dgcID, 0);
- UnicastServerRef var1 = new UnicastServerRef(var0);
- RemoteStub var2 = var1.setSkeleton(dgc);
- Target var3 = new Target(dgc, var1, var2);
- var3.setPermanent(true);
- ObjectTable.putTarget(dgcID, var3);
- } catch (RemoteException var4) {
- System.out.println("couldn't init remote garbage collector");
- System.out.println(var4.getMessage());
- ((Throwable)var4).printStackTrace();
- }
- }
- }
-