Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/hotspot/share/opto/library_call.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3777,6 +3777,8 @@ bool LibraryCallKit::inline_native_Continuation_pinning(bool unpin) {
{
// Trap (but not deoptimize (Action_none)) and continue in the interpreter
// which will throw IllegalStateException for pin count over/underflow.
// No memory changed so far - we can use memory create by reset_memory()
// at the beginning of this intrinsic. No need to call reset_memory() again.
PreserveJVMState pjvms(this);
set_control(pin_count_over_underflow);
uncommon_trap(Deoptimization::Reason_intrinsic,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,45 +33,45 @@

public class TestContinuationPinningAndEA {

static class FailsEA {
final Object o;
static class FailsEA {
final Object o;

public FailsEA() throws Throwable {
o = new Object();
Continuation.pin();
Continuation.unpin();
public FailsEA() throws Throwable {
o = new Object();
Continuation.pin();
Continuation.unpin();
}
}
}

static class Crashes {
final Object o;
static class Crashes {
final Object o;

public Crashes() throws Throwable {
Continuation.pin();
Continuation.unpin();
o = new Object();
public Crashes() throws Throwable {
Continuation.pin();
Continuation.unpin();
o = new Object();
}
}
}

static void test_FailsEA() throws Throwable {
for (int i = 0; i < 10_000; ++i) {
new FailsEA();
static void test_FailsEA() throws Throwable {
for (int i = 0; i < 10_000; ++i) {
new FailsEA();
}
}
}

static void test_Crashes() throws Throwable {
for (int i = 0; i < 10_000; ++i) {
new Crashes();
static void test_Crashes() throws Throwable {
for (int i = 0; i < 10_000; ++i) {
new Crashes();
}
}
}

public static void main(String[] args) throws Throwable {
int iterations = 100;
for (int i = 0; i < iterations; ++i) {
test_FailsEA();
public static void main(String[] args) throws Throwable {
int iterations = 100;
for (int i = 0; i < iterations; ++i) {
test_FailsEA();
}
for (int i = 0; i < iterations; ++i) {
test_Crashes();
}
}
for (int i = 0; i < iterations; ++i) {
test_Crashes();
}
}
}