summaryrefslogtreecommitdiff
path: root/subversion/bindings/javahl/native/CommitCallback.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/bindings/javahl/native/CommitCallback.cpp')
-rw-r--r--subversion/bindings/javahl/native/CommitCallback.cpp24
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);
}