From bf4d413ea185e857de534913c556f00435ba9f21 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Wed, 20 Jun 2012 03:09:50 +0200
Subject: Fix TempFileCache/LauncherTempFileCache (regression commit:
 1468286bf569a493e4fdb887d5f3732f88c8cec3) 'update' scenario in same JVM
 instance.

TempFileCache/LauncherTempFileCache were using the system property
'jnlp.jogamp.tmp.cache.root', if set.

However, in case one JVM launched an old GlueGen (Applet)
and then launching a new GlueGen (Applet) w/ a new tmpDir location,
the property is still set but the tmpRootDir location does not exist.
This patch tolerates this situation and cont. setting a new tmpRootDir.
Example:
  JVM1.GlueGen1 tmpDir: /tmp/,             tmpRootDir: /tmp/jogamp.tmp.cache_000000/
  JVM1.GlueGen2 tmpDir: /tmp/jogamp_0000/, tmpRootDir: /tmp/jogamp_0000/file_cache/

Misc:
  - IOUtil: Always use 'jogamp_xxxx' as the sys-temp subfolder for tmpDir
  - JNILibLoaderBase: Remove unised import
  - TempJarCache.validateCertificates(): Add OK DEBUG output.
---
 .../android/launcher/LauncherTempFileCache.java    | 51 ++++++++++++++--------
 1 file changed, 32 insertions(+), 19 deletions(-)

(limited to 'src/java/jogamp/android/launcher/LauncherTempFileCache.java')

diff --git a/src/java/jogamp/android/launcher/LauncherTempFileCache.java b/src/java/jogamp/android/launcher/LauncherTempFileCache.java
index 7e566c9..c7b9ad0 100644
--- a/src/java/jogamp/android/launcher/LauncherTempFileCache.java
+++ b/src/java/jogamp/android/launcher/LauncherTempFileCache.java
@@ -101,6 +101,8 @@ public class LauncherTempFileCache {
      *         a. If set, then some other thread in a different ClassLoader has
      *            already created the tmprootdir, so we just need to
      *            use it. The remaining steps are skipped.
+     *            However, we check the existence of the tmpRootDir
+     *            and if non existent, we assume a new launch and continue.
      *
      *         b. If not set, then we are the first thread in this JVM to run,
      *            and we need to create the the tmprootdir.
@@ -148,6 +150,36 @@ public class LauncherTempFileCache {
             }
             tmpRootPropValue = System.getProperty(tmpRootPropName);
 
+            if (tmpRootPropValue != null) {
+                // Make sure that the property is not set to an illegal value
+                if (tmpRootPropValue.indexOf('/') >= 0 ||
+                        tmpRootPropValue.indexOf(File.separatorChar) >= 0) {
+                    throw new IOException("Illegal value of: " + tmpRootPropName);
+                }
+
+                // Set tmpRootDir = ${tmpbase}/${jnlp.applet.launcher.tmproot}
+                if (DEBUG) {
+                    System.err.println("TempFileCache: Trying existing value of: " +
+                            tmpRootPropName + "=" + tmpRootPropValue);
+                }
+                tmpRootDir = new File(tmpBaseDir, tmpRootPropValue);
+                if (DEBUG) {
+                    System.err.println("TempFileCache: Trying tmpRootDir = " + tmpRootDir.getAbsolutePath());
+                }                
+                if (tmpRootDir.isDirectory()) {
+                    if (!tmpRootDir.canWrite()) {
+                        throw new IOException("Temp root directory is not writable: " + tmpRootDir.getAbsolutePath());
+                    }
+                } else {
+                    // It is possible to move to a new GlueGen version within the same JVM
+                    // In case tmpBaseDir has changed, we should assume a new tmpRootDir.
+                    System.err.println("TempFileCache: None existing tmpRootDir = " + tmpRootDir.getAbsolutePath()+", assuming new path due to update");
+                    tmpRootPropValue = null;
+                    tmpRootDir = null;
+                    System.clearProperty(tmpRootPropName);
+                }                
+            }
+            
             if (tmpRootPropValue == null) {
                 // Create the tmpbase directory if it doesn't already exist
                 tmpBaseDir.mkdirs();
@@ -225,25 +257,6 @@ public class LauncherTempFileCache {
                 };
                 reaperThread.setName("TempFileCache-Reaper");
                 reaperThread.start();
-            } else {
-                // Make sure that the property is not set to an illegal value
-                if (tmpRootPropValue.indexOf('/') >= 0 ||
-                        tmpRootPropValue.indexOf(File.separatorChar) >= 0) {
-                    throw new IOException("Illegal value of: " + tmpRootPropName);
-                }
-
-                // Set tmpRootDir = ${tmpbase}/${jnlp.applet.launcher.tmproot}
-                if (DEBUG) {
-                    System.err.println("TempFileCache: Using existing value of: " +
-                            tmpRootPropName + "=" + tmpRootPropValue);
-                }
-                tmpRootDir = new File(tmpBaseDir, tmpRootPropValue);
-                if (DEBUG) {
-                    System.err.println("TempFileCache: tmpRootDir = " + tmpRootDir.getAbsolutePath());
-                }
-                if (!tmpRootDir.isDirectory()) {
-                    throw new IOException("Cannot access " + tmpRootDir);
-                }
             }
         }
         if (DEBUG) {
-- 
cgit v1.2.3