File tree Expand file tree Collapse file tree 2 files changed +18
-2
lines changed Expand file tree Collapse file tree 2 files changed +18
-2
lines changed Original file line number Diff line number Diff line change @@ -114,13 +114,15 @@ namespace jni
114
114
}
115
115
116
116
117
- inline void PushLocalFrame (JNIEnv& env, jint capacity)
117
+ inline UniqueLocalFrame PushLocalFrame (JNIEnv& env, jint capacity)
118
118
{
119
119
CheckJavaExceptionThenErrorCode (env, env.PushLocalFrame (capacity));
120
+ return UniqueLocalFrame (&env, LocalFrameDeleter ());
120
121
}
121
122
122
- inline jobject* PopLocalFrame (JNIEnv& env, jobject* result = nullptr )
123
+ inline jobject* PopLocalFrame (JNIEnv& env, UniqueLocalFrame&& frame, jobject* result = nullptr )
123
124
{
125
+ frame.release ();
124
126
return CheckJavaException (env,
125
127
Wrap<jobject*>(env.PopLocalFrame (Unwrap (result))));
126
128
}
Original file line number Diff line number Diff line change 6
6
7
7
namespace jni
8
8
{
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
+
9
23
class GlobalRefDeleter
10
24
{
11
25
private:
You can’t perform that action at this time.
0 commit comments