Author: peter_firmstone
Date: Tue May 21 10:12:15 2013
New Revision: 1484732

URL: http://svn.apache.org/r1484732
Log:
Increase logging verbosity and fix "this" escaping in constructor caused by 
export performed during construction.

Modified:
    
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeasedSpaceListener.java

Modified: 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeasedSpaceListener.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeasedSpaceListener.java?rev=1484732&r1=1484731&r2=1484732&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeasedSpaceListener.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/qa/src/com/sun/jini/test/impl/outrigger/leasing/LeasedSpaceListener.java
 Tue May 21 10:12:15 2013
@@ -39,6 +39,11 @@ import net.jini.security.proxytrust.Serv
 import com.sun.jini.proxy.BasicProxyTrustVerifier;
 
 import com.sun.jini.qa.harness.QAConfig;
+import java.io.WriteAbortedException;
+import java.rmi.server.ExportException;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -50,7 +55,9 @@ public class LeasedSpaceListener
 {
     private static Logger logger = Logger.getLogger("com.sun.jini.qa.harness");
     private boolean received = false;
-    private final Object proxy;
+    private Object proxy;
+    private final Exporter exporter;
+    private final AccessControlContext context;
 
     public LeasedSpaceListener(Configuration c) throws RemoteException {
        try {
@@ -61,18 +68,40 @@ public class LeasedSpaceListener
                                      "outriggerListenerExporter",
                                      Exporter.class);
            }
-           proxy = exporter.export(this);
+            this.exporter = exporter;
+            context = AccessController.getContext();
+           // Proxy was originally exported here, allowing "this" to escape.
        } catch (ConfigurationException e) {
            throw new RemoteException("Bad configuration", e);
        }
     }
+    
+    private synchronized Object getProxy(){
+        if (proxy == null) { 
+            proxy = AccessController.doPrivileged(new 
PrivilegedAction<Object>(){
+
+                @Override
+                public Object run() {
+                    try {
+                        return exporter.export(LeasedSpaceListener.this);
+                    } catch (ExportException ex) {
+                        String message = "Proxy export failed for 
LeaseListener";
+                        logger.log(Level.WARNING, message , ex);
+                        return null;
+                    }
+                }
+                
+            }, context);
+        }
+        return proxy;
+    }
 
     public Object writeReplace() throws ObjectStreamException {
-        return proxy;
+        return getProxy();
     }
 
     public TrustVerifier getProxyVerifier() {
-       return new BasicProxyTrustVerifier(proxy);
+       return new BasicProxyTrustVerifier(getProxy());
     }
 
     public void notify(RemoteEvent theEvent)
@@ -84,7 +113,7 @@ public class LeasedSpaceListener
             received = true;
             this.notifyAll();
         }
-        logger.log(Level.INFO, "notify called at {0}", date);
+        logger.log(Level.INFO, "notify called at {0}", date.getTime());
     }
 
     /**


Reply via email to