diff options
Diffstat (limited to 'subversion/bindings/javahl/native/CommitCallback.cpp')
-rw-r--r-- | subversion/bindings/javahl/native/CommitCallback.cpp | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/subversion/bindings/javahl/native/CommitCallback.cpp b/subversion/bindings/javahl/native/CommitCallback.cpp index 2ffe326..2139312 100644 --- a/subversion/bindings/javahl/native/CommitCallback.cpp +++ b/subversion/bindings/javahl/native/CommitCallback.cpp @@ -37,9 +37,8 @@ * @param jcallback the Java callback object. */ CommitCallback::CommitCallback(jobject jcallback) -{ - m_callback = jcallback; -} + : m_callback(jcallback) +{} /** * Destroy a CommitCallback object @@ -81,13 +80,13 @@ CommitCallback::commitInfo(const svn_commit_info_t *commit_info, static jmethodID sm_mid = 0; if (sm_mid == 0) { - jclass clazz = env->FindClass(JAVA_PACKAGE"/callback/CommitCallback"); + jclass clazz = env->FindClass(JAVAHL_CLASS("/callback/CommitCallback")); if (JNIUtil::isJavaExceptionThrown()) POP_AND_RETURN(SVN_NO_ERROR); sm_mid = env->GetMethodID(clazz, "commitInfo", - "(L"JAVA_PACKAGE"/CommitInfo;)V"); + "(" JAVAHL_ARG("/CommitInfo;") ")V"); if (JNIUtil::isJavaExceptionThrown()) POP_AND_RETURN(SVN_NO_ERROR); } @@ -97,8 +96,17 @@ CommitCallback::commitInfo(const svn_commit_info_t *commit_info, POP_AND_RETURN(SVN_NO_ERROR); env->CallVoidMethod(m_callback, sm_mid, jcommitInfo); - // No need to check for an exception here, because we return anyway. - env->PopLocalFrame(NULL); - return SVN_NO_ERROR; + POP_AND_RETURN_EXCEPTION_AS_SVNERROR(); +} + + +PersistentCommitCallback::PersistentCommitCallback(jobject jcallback) + : CommitCallback(JNIUtil::getEnv()->NewGlobalRef(jcallback)) +{} + +PersistentCommitCallback::~PersistentCommitCallback() +{ + if (m_callback) + JNIUtil::getEnv()->DeleteGlobalRef(m_callback); } |