Author: brane
Date: Wed Jan 15 16:43:49 2014
New Revision: 1558458

URL: http://svn.apache.org/r1558458
Log:
On the javahl-1.8-extensions branch: Synced JavaHL from trunk up to r1558456.

Modified:
    subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/   
(props changed)
    
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
    
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp
    
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/StateReporter.cpp
    
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java

Propchange: 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/
------------------------------------------------------------------------------
  Merged /subversion/trunk/subversion/bindings/javahl:r1558016-1558456

Modified: 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
URL: 
http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp?rev=1558458&r1=1558457&r2=1558458&view=diff
==============================================================================
--- 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
 (original)
+++ 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/JNIUtil.cpp
 Wed Jan 15 16:43:49 2014
@@ -158,8 +158,19 @@ bool JNIUtil::JNIGlobalInit(JNIEnv *env)
     }
 
   svn_utf_initialize2(FALSE, g_pool); /* Optimize character conversions */
-  svn_fs_initialize(g_pool); /* Avoid some theoretical issues */
-  svn_ra_initialize(g_pool);
+
+  // Initialize the libraries we use
+  err = svn_fs_initialize(g_pool);
+  if (!err)
+    err = svn_ra_initialize(g_pool);
+  if (err)
+    {
+      if (stderr && err->message)
+        fprintf(stderr, "%s", err->message);
+
+      svn_error_clear(err);
+      return FALSE;
+    }
 
   /* We shouldn't fill the JVMs memory with FS cache data unless
      explictly requested. And we don't either, because the caches get

Modified: 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp
URL: 
http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp?rev=1558458&r1=1558457&r2=1558458&view=diff
==============================================================================
--- 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp
 (original)
+++ 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/RemoteSession.cpp
 Wed Jan 15 16:43:49 2014
@@ -128,16 +128,6 @@ RemoteSession::open(jint jretryAttempts,
                     const char*  usernameStr, const char*  passwordStr,
                     Prompter*& prompter, jobject jprogress, jobject jcfgcb)
 {
-  /*
-   * Initialize ra layer if we have not done so yet
-   */
-  static bool initialized = false;
-  if (!initialized)
-    {
-      SVN_JNI_ERR(svn_ra_initialize(JNIUtil::getPool()), NULL);
-      initialized = true;
-    }
-
   RemoteSession* session = new RemoteSession(
       jretryAttempts, url, uuid, configDirectory,
       usernameStr, passwordStr, prompter, jcfgcb);

Modified: 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/StateReporter.cpp
URL: 
http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/StateReporter.cpp?rev=1558458&r1=1558457&r2=1558458&view=diff
==============================================================================
--- 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/StateReporter.cpp
 (original)
+++ 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/native/StateReporter.cpp
 Wed Jan 15 16:43:49 2014
@@ -160,6 +160,7 @@ StateReporter::finishReport()
   SVN_JNI_ERR(m_raw_reporter->finish_report(m_report_baton,
                                             subPool.getPool()),
               SVN_INVALID_REVNUM);
+  m_valid = false;
   return jlong(m_target_revision);
 }
 
@@ -173,6 +174,7 @@ StateReporter::abortReport()
   SVN::Pool subPool(pool);
   SVN_JNI_ERR(m_raw_reporter->abort_report(m_report_baton,
                                            subPool.getPool()),);
+  m_valid = false;
 }
 
 void

Modified: 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java?rev=1558458&r1=1558457&r2=1558458&view=diff
==============================================================================
--- 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
 (original)
+++ 
subversion/branches/javahl-1.8-extensions/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
 Wed Jan 15 16:43:49 2014
@@ -1139,6 +1139,7 @@ public class SVNRemoteTests extends SVNT
             rp.dispose();
         }
         assertEquals(21, receiver.status.size());
+        session.checkPath("", Revision.SVN_INVALID_REVNUM);
     }
 
     public void testTextchangeStatus() throws Exception
@@ -1354,4 +1355,43 @@ public class SVNRemoteTests extends SVNT
         assertEquals("/iota", rev.getPath());
         assertFalse(rev.isResultOfMerge());
     }
+
+    // This test is a result of a threading bug that was identified in
+    // serf-1.3.2 and earlier. The net result was that opening two RA
+    // sessions to an https:// URL in two parallel threads would cause
+    // a crash in serf, due to the OpenSSL library not being
+    // initialized in a single-threaded context.
+    //
+    // The problem does not appear to exist with other RA methods, but
+    // the test is here just in case someone is actually pedantic
+    // enough to test JavaHL with an HTTPS setup.
+    public void testParallelOpen() throws Exception
+    {
+        final Runnable runnable = new Runnable() {
+                @Override
+                public void run() {
+                    ISVNRemote session = null;
+                    try {
+                        session = getSession();
+                        assertEquals(1, session.getLatestRevision());
+                    }
+                    catch (ClientException ex) {
+                        throw new RuntimeException(ex);
+                    }
+                    finally {
+                        if (session != null)
+                            session.dispose();
+                    }
+                }
+            };
+
+        Thread thread1 = new Thread(runnable);
+        Thread thread2 = new Thread(runnable);
+
+        thread1.start();
+        thread2.start();
+
+        thread1.join();
+        thread2.join();
+    }
 }


Reply via email to