diff --git a/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/jnihelper.h b/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/jnihelper.h index 753e3048f4d..00c3e2a572b 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/jnihelper.h +++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/jnihelper.h @@ -21,6 +21,16 @@ * questions. */ +#include + +// checked malloc to trap OOM conditions +static void* c_malloc(JNIEnv* env, size_t size) { + void* ret = malloc(size); + if (ret == NULL) + env->FatalError("malloc failed"); + return ret; +} + // Asserts every exception as fatal one #define CE {\ if (env->ExceptionOccurred())\ diff --git a/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/libjnistress001.cpp b/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/libjnistress001.cpp index e57cf28b3a1..2f70e8187ae 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/libjnistress001.cpp +++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/libjnistress001.cpp @@ -66,11 +66,11 @@ Java_nsk_stress_jni_JNIter001_jnistress (JNIEnv *env, jobject jobj, jstring jstr env->MonitorEnter(jobj); CE if (!allocs) { - element = (CHAR_ARRAY *)malloc(sizeof(CHAR_ARRAY)); - element->str = (const char **)malloc(nstr*sizeof(const char *)); - element->checkstr = (char **)malloc(nstr*sizeof(char *)); + element = (CHAR_ARRAY *)c_malloc(env, sizeof(CHAR_ARRAY)); + element->str = (const char **)c_malloc(env, nstr*sizeof(const char *)); + element->checkstr = (char **)c_malloc(env, nstr*sizeof(char *)); for (j=0;jcheckstr[j] = (char *)malloc(DIGESTLENGTH*sizeof(char)); + element->checkstr[j] = (char *)c_malloc(env, DIGESTLENGTH*sizeof(char)); } for(j=0;jMonitorEnter(jobj); CE if (!index) { - javachars = (JCHAR_ARRAY *)malloc(sizeof(JCHAR_ARRAY)); - javachars->str = (const jchar **)malloc(nstr*sizeof(const jchar *)); - javachars->checkstr = (char **)malloc(nstr*sizeof(char *)); - javachars->size = (int *)malloc(nstr*sizeof(int)); + javachars = (JCHAR_ARRAY *)c_malloc(env, sizeof(JCHAR_ARRAY)); + javachars->str = (const jchar **)c_malloc(env, nstr*sizeof(const jchar *)); + javachars->checkstr = (char **)c_malloc(env, nstr*sizeof(char *)); + javachars->size = (int *)c_malloc(env, nstr*sizeof(int)); for (j=0;jcheckstr[j] = (char *)malloc(DIGESTLENGTH*sizeof(char)); + javachars->checkstr[j] = (char *)c_malloc(env, DIGESTLENGTH*sizeof(char)); } for(j=0;jstr[index] = env->GetStringChars(jstr,0); CE javachars->size[index] = env->GetStringUTFLength(jstr); CE - len += javachars->size[index]; - elem = (char*) malloc(javachars->size[index]*sizeof(char)); - for (j=0; j < javachars->size[index]; j++) { + elem_len = javachars->size[index]; + len += elem_len; + elem = (char*) c_malloc(env, elem_len*sizeof(char)); + for (j=0; j < elem_len; j++) { elem[j] = (char) javachars->str[index][j]; } + //memcpy(digest, elem, javachars->size[index]); - for(j=0;jsize[index]; j++) { + for(j=0;jcheckstr[index++],digest,DIGESTLENGTH); if (index%printperiod==0) { - printf("Check string sum for thread %s is ",elem); + printf("Check string sum for thread %.*s is ", elem_len, elem); for (j=0;jNewString(javachars->str[index-1],javachars->size[index-1]); CE + tmpstr=env->NewString(javachars->str[index-1],elem_len); CE for (j=0; jsize[j]*sizeof(char)); + elem = (char*) c_malloc(env, javachars->size[j]*sizeof(char)); for (i=0; i < javachars->size[j]; i++) { elem[i] = (char) javachars->str[j][i]; } @@ -237,7 +240,7 @@ Java_nsk_stress_jni_JNIter001_jnistress1(JNIEnv *env, jobject jobj, jstring jstr return(tmpstr); } env->MonitorExit(jobj); CE - return(env->NewString(javachars->str[index-1],javachars->size[index-1])); + return(env->NewString(javachars->str[index-1],elem_len)); } }