< prev index next >
test/hotspot/jtreg/vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn002/libforceEarlyReturn002a.cpp
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2007, 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.
--- 1,7 ----
/*
! * Copyright (c) 2007, 2020, 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.
*** 24,52 ****
#include "jni.h"
extern "C" {
- int always_true = 1;
-
JNIEXPORT jint JNICALL
Java_nsk_jdwp_ThreadReference_ForceEarlyReturn_forceEarlyReturn002_forceEarlyReturn002a_nativeMethod(JNIEnv *env, jobject classObject, jobject object)
{
! int dummy_counter = 0;
// notify another thread that thread in native method
jclass klass = env->GetObjectClass(object);
jfieldID field = env->GetFieldID(klass, "threadInNative", "Z");
env->SetBooleanField(object, field, 1);
// execute infinite loop to be sure that thread in native method
! while (always_true)
! {
! // Need some dummy code so the optimizer does not remove this loop.
! dummy_counter = dummy_counter < 1000 ? 0 : dummy_counter + 1;
! }
! // The optimizer can be surprisingly clever.
! // Use dummy_counter so it can never be optimized out.
! // This statement will always return 0.
! return dummy_counter >= 0 ? 0 : 1;
}
}
--- 24,45 ----
#include "jni.h"
extern "C" {
JNIEXPORT jint JNICALL
Java_nsk_jdwp_ThreadReference_ForceEarlyReturn_forceEarlyReturn002_forceEarlyReturn002a_nativeMethod(JNIEnv *env, jobject classObject, jobject object)
{
! static volatile int dummy_counter = 0;
// notify another thread that thread in native method
jclass klass = env->GetObjectClass(object);
jfieldID field = env->GetFieldID(klass, "threadInNative", "Z");
env->SetBooleanField(object, field, 1);
// execute infinite loop to be sure that thread in native method
! while (dummy_counter == 0) {}
!
! // Should not reach here
! return 0;
}
}
< prev index next >