test/hotspot/jtreg/vmTestbase/nsk/monitoring/share/StackTraceController.cpp
author jcbeyler
Mon, 17 Sep 2018 19:36:09 -0700
changeset 51774 79dc492c00ab
parent 51551 e409244ce72e
child 51941 0f7d0bb6cfe2
permissions -rw-r--r--
8210481: Remove #ifdef cplusplus from vmTestbase Summary: Remove all cplusplus ifdefs from vmTestbase Reviewed-by: dholmes, iignatyev, cjplummer, sspitsyn

/*
 * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

#include <jni.h>
#include <stdio.h>
#include "jni_tools.h"

extern "C" {

#define GET_OBJECT_CLASS(_class, _obj)\
    if (!NSK_JNI_VERIFY(env, (_class = \
            NSK_CPP_STUB2(GetObjectClass, env, _obj)) != NULL))\
        return 2

#define CALL_STATIC_VOID_NOPARAM(_class, _methodName)\
    GET_STATIC_METHOD_ID(method, _class, _methodName, "()V");\
    if (!NSK_JNI_VERIFY_VOID(env, NSK_CPP_STUB3(CallStaticVoidMethod, env,\
                            _class, method)))\
        return 2

#define GET_STATIC_METHOD_ID(_methodID, _class, _methodName, _sig)\
    if (!NSK_JNI_VERIFY(env, (_methodID = \
            NSK_CPP_STUB4(GetStaticMethodID, env, _class,\
                _methodName, _sig)) != NULL))\
        return 2

#define GET_METHOD_ID(_methodID, _class, _methodName, _sig)\
    if (!NSK_JNI_VERIFY(env, (_methodID = \
            NSK_CPP_STUB4(GetMethodID, env, _class,\
                _methodName, _sig)) != NULL))\
        return 2

#define CALL_VOID_NOPARAM(_obj, _class, _methodName)\
    GET_METHOD_ID(method, _class, _methodName, "()V");\
    if (!NSK_JNI_VERIFY_VOID(env, NSK_CPP_STUB3(CallVoidMethod, env, _obj,\
                                                    method)))\
        return 2

JNIEXPORT jint JNICALL
Java_nsk_monitoring_stress_thread_RunningThread_recursionNative(JNIEnv *env,
         jobject obj, jint maxDepth, jint currentDepth, jboolean returnToJava) {
    jmethodID method;
    jclass threadClass;

    GET_OBJECT_CLASS(threadClass, obj);
    currentDepth++;

    if (maxDepth > currentDepth) {
        CALL_STATIC_VOID_NOPARAM(threadClass, "yield");

        if (returnToJava) {
            GET_METHOD_ID(method, threadClass, "recursionJava", "(II)V");
            if (!NSK_JNI_VERIFY_VOID(env,
                                     NSK_CPP_STUB5(CallIntMethod, env, obj,
                                                   method, maxDepth,
                                                   currentDepth))) {
                return 1;
            }
        } else {
            GET_METHOD_ID(method, threadClass, "recursionNative", "(IIZ)I");
            if (!NSK_JNI_VERIFY_VOID(env,
                                     NSK_CPP_STUB6(CallIntMethod, env, obj,
                                                   method, maxDepth,
                                                   currentDepth,
                                                   returnToJava))) {
                return 1;
            }
        }
    }
    CALL_VOID_NOPARAM(obj, threadClass, "waitForSign");
    return 0;
}

}