--- old/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.cpp 2018-10-09 12:06:03.464677574 -0700 +++ new/test/hotspot/jtreg/vmTestbase/nsk/share/jni/ExceptionCheckingJniEnv.cpp 2018-10-09 12:06:03.276678125 -0700 @@ -22,8 +22,6 @@ * questions. */ -#include - #include "ExceptionCheckingJniEnv.hpp" namespace { @@ -31,22 +29,42 @@ template class JNIVerifier { public: - JNIVerifier(ExceptionCheckingJniEnv *env, const std::string& base_msg) - : _env(env), _base_msg(base_msg) { + JNIVerifier(ExceptionCheckingJniEnv *env, const char* base_msg) + : _env(env), _base_msg(base_msg), _return_error(NULL) { } ~JNIVerifier() { JNIEnv* jni_env = _env->GetJNIEnv(); if (jni_env->ExceptionCheck()) { - _env->HandleError(_base_msg.c_str()); - } else { - if (!_return_error.empty()) { - const std::string msg = _base_msg + ":" + _return_error; - _env->HandleError(msg.c_str()); - } + _env->HandleError(_base_msg); + return; + } + + if (_return_error != NULL) { + ProcessReturnError(); } } + void ProcessReturnError() { + int len = snprintf(NULL, 0, "%s : %s", _base_msg, _return_error) + 1; + + if (len <= 0) { + _env->HandleError(_return_error); + return; + } + + char* full_message = (char*) malloc(len); + if (full_message == NULL) { + _env->HandleError(_return_error); + return; + } + + snprintf(full_message, len, "%s : %s", _base_msg, _return_error); + + _env->HandleError(full_message); + free(full_message); + } + T ResultNotNull(T ptr) { if (ptr == NULL) { _return_error = "Return is NULL"; @@ -56,8 +74,8 @@ private: ExceptionCheckingJniEnv* _env; - std::string _base_msg; - std::string _return_error; + const char* _base_msg; + const char* _return_error; }; }