Skip to content

Commit

Permalink
[TIMOB-25963] Cleanup allocated java strings
Browse files Browse the repository at this point in the history
  • Loading branch information
Gary Mathews committed Apr 18, 2018
1 parent 1d9decb commit 2f87c47
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions android/runtime/v8/src/native/JSException.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

#include "JSException.h"

#define MAX_STACK 10

using namespace v8;

namespace titanium {
Expand All @@ -29,29 +31,33 @@ Local<Value> JSException::fromJavaException(v8::Isolate* isolate, jthrowable jav
bool deleteRef = false;
if (!javaException) {
javaException = env->ExceptionOccurred();
env->ExceptionClear();
deleteRef = true;
}
//env->ExceptionDescribe();
env->ExceptionClear();

jstring javaMessage = (jstring) env->CallObjectMethod(javaException, JNIUtil::throwableGetMessageMethod);
if (!javaMessage) {
return THROW(isolate, "Java Exception occurred");
}
std::stringstream message(env->GetStringUTFChars(javaMessage, NULL));
const char* messagePtr = env->GetStringUTFChars(javaMessage, NULL);
std::stringstream message;
message << messagePtr;

jobjectArray frames = (jobjectArray) env->CallObjectMethod(javaException, JNIUtil::throwableGetStackTraceMethod);
jsize frames_length = env->GetArrayLength(frames);
for (int i = 0; i < (frames_length > 10 ? 10 : frames_length); i++) {
for (int i = 0; i < (frames_length > MAX_STACK ? MAX_STACK : frames_length); i++) {
jobject frame = env->GetObjectArrayElement(frames, i);
jstring javaStack = (jstring) env->CallObjectMethod(frame, JNIUtil::stackTraceElementToStringMethod);

message << std::endl << env->GetStringUTFChars(javaStack, NULL);
const char* stackPtr = env->GetStringUTFChars(javaStack, NULL);
message << std::endl << " " << stackPtr;

env->ReleaseStringUTFChars(javaStack, stackPtr);
env->DeleteLocalRef(javaStack);
}
message << std::endl;

env->ReleaseStringUTFChars(javaMessage, messagePtr);
env->DeleteLocalRef(javaMessage);
if (deleteRef) {
env->DeleteLocalRef(javaException);
Expand Down

0 comments on commit 2f87c47

Please sign in to comment.