[[[
    JavaHL: Separated logic for clearing java object cppAddr into its own
function as needed by the commit editor C++ objects that require the child
to clear the reference and parent to perform deletion

    [ in subversion/bindings/javahl/native ]

    * SVNBase.cpp, SVNBase.h
      (dispose, disconnectCppObject): Split logic for clearing cppAddr
value in the java object into its own function
]]]
Index: subversion/bindings/javahl/native/SVNBase.cpp
===================================================================
--- subversion/bindings/javahl/native/SVNBase.cpp       (revision 1328758)
+++ subversion/bindings/javahl/native/SVNBase.cpp       (working copy)
@@ -77,7 +77,12 @@ void SVNBase::finalize()
 
 void SVNBase::dispose(jobject jthis, jfieldID *fid, const char *className)
 {
+  disconnectCppObject(jthis, fid, className);
   delete this;
+}
+
+void SVNBase::disconnectCppObject(jobject jthis, jfieldID *fid, const char 
*className)
+{
   JNIEnv *env = JNIUtil::getEnv();
   SVNBase::findCppAddrFieldID(fid, className, env);
   if (*fid == 0)
Index: subversion/bindings/javahl/native/SVNBase.h
===================================================================
--- subversion/bindings/javahl/native/SVNBase.h (revision 1328758)
+++ subversion/bindings/javahl/native/SVNBase.h (working copy)
@@ -83,6 +83,13 @@ class SVNBase
    */
   void dispose(jobject jthis, jfieldID *fid, const char *className);
 
+  /**
+   * Remove cppAddr from the related java object so that it cannot
+   * try to access disposed object
+   * @since 1.7.?
+   */
+  void disconnectCppObject(jobject jthis, jfieldID *fid, const char 
*className);
+
  private:
   /**
    * If the value pointed to by @a fid is zero, find the @c jfieldID

Reply via email to