8326236: assert(ce != nullptr) failed in Continuation::continuation_bottom_sender

Reviewed-by: dholmes, mgronlun
This commit is contained in:
Patricio Chilano Mateo 2025-01-14 21:51:05 +00:00
parent 02d24934ff
commit ec2aaaaf83
4 changed files with 20 additions and 0 deletions

View File

@ -163,6 +163,11 @@ bool frame::safe_for_sender(JavaThread *thread) {
}
if (Continuation::is_return_barrier_entry(sender_pc)) {
// sender_pc might be invalid so check that the frame
// actually belongs to a Continuation.
if (!Continuation::is_frame_in_continuation(thread, *this)) {
return false;
}
// If our sender_pc is the return barrier, then our "real" sender is the continuation entry
frame s = Continuation::continuation_bottom_sender(thread, *this, sender_sp);
sender_sp = s.sp();

View File

@ -122,6 +122,11 @@ bool frame::safe_for_sender(JavaThread *thread) {
address sender_pc = (address) sender_abi->lr;
if (Continuation::is_return_barrier_entry(sender_pc)) {
// sender_pc might be invalid so check that the frame
// actually belongs to a Continuation.
if (!Continuation::is_frame_in_continuation(thread, *this)) {
return false;
}
// If our sender_pc is the return barrier, then our "real" sender is the continuation entry
frame s = Continuation::continuation_bottom_sender(thread, *this, sender_sp);
sender_sp = s.sp();

View File

@ -158,6 +158,11 @@ bool frame::safe_for_sender(JavaThread *thread) {
}
if (Continuation::is_return_barrier_entry(sender_pc)) {
// sender_pc might be invalid so check that the frame
// actually belongs to a Continuation.
if (!Continuation::is_frame_in_continuation(thread, *this)) {
return false;
}
// If our sender_pc is the return barrier, then our "real" sender is the continuation entry
frame s = Continuation::continuation_bottom_sender(thread, *this, sender_sp);
sender_sp = s.sp();

View File

@ -154,6 +154,11 @@ bool frame::safe_for_sender(JavaThread *thread) {
}
if (Continuation::is_return_barrier_entry(sender_pc)) {
// sender_pc might be invalid so check that the frame
// actually belongs to a Continuation.
if (!Continuation::is_frame_in_continuation(thread, *this)) {
return false;
}
// If our sender_pc is the return barrier, then our "real" sender is the continuation entry
frame s = Continuation::continuation_bottom_sender(thread, *this, sender_sp);
sender_sp = s.sp();