Skip to content

Commit 34a25ef

Browse files
committed
PushLocalFrame needs to return an ownership type
1 parent 1757f7c commit 34a25ef

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

include/jni/functions.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,13 +114,15 @@ namespace jni
114114
}
115115

116116

117-
inline void PushLocalFrame(JNIEnv& env, jint capacity)
117+
inline UniqueLocalFrame PushLocalFrame(JNIEnv& env, jint capacity)
118118
{
119119
CheckJavaExceptionThenErrorCode(env, env.PushLocalFrame(capacity));
120+
return UniqueLocalFrame(&env, LocalFrameDeleter());
120121
}
121122

122-
inline jobject* PopLocalFrame(JNIEnv& env, jobject* result = nullptr)
123+
inline jobject* PopLocalFrame(JNIEnv& env, UniqueLocalFrame&& frame, jobject* result = nullptr)
123124
{
125+
frame.release();
124126
return CheckJavaException(env,
125127
Wrap<jobject*>(env.PopLocalFrame(Unwrap(result))));
126128
}

include/jni/ownership.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,20 @@
66

77
namespace jni
88
{
9+
struct LocalFrameDeleter
10+
{
11+
void operator()(JNIEnv* env) const
12+
{
13+
if (env)
14+
{
15+
env->PopLocalFrame(nullptr);
16+
}
17+
}
18+
};
19+
20+
using UniqueLocalFrame = std::unique_ptr< JNIEnv, LocalFrameDeleter >;
21+
22+
923
class GlobalRefDeleter
1024
{
1125
private:

0 commit comments

Comments
 (0)