|
1 | 1 | /*
|
2 |
| - * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. |
| 2 | + * Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved. |
3 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
4 | 4 | *
|
5 | 5 | * This code is free software; you can redistribute it and/or modify it
|
@@ -452,13 +452,25 @@ VirtualThreadMount(jvmtiEnv *jvmti, ...) {
|
452 | 452 | mname = get_method_name(jvmti, jni, method);
|
453 | 453 | cname = get_method_class_name(jvmti, jni, method);
|
454 | 454 |
|
| 455 | + print_frame_event_info(jvmti, jni, thread, method, "VirtualThreadMount", ++vthread_mounted_count); |
| 456 | + |
455 | 457 | LOG("\nHit #%d: VirtualThreadMount #%d: enabling FramePop for method: %s::%s on virtual thread: %p\n",
|
456 |
| - brkptBreakpointHit, ++vthread_mounted_count, cname, mname, (void*)thread); |
| 458 | + brkptBreakpointHit, vthread_mounted_count, cname, mname, (void*)thread); |
457 | 459 |
|
458 | 460 | err = jvmti->NotifyFramePop(thread, 0);
|
459 | 461 | check_jvmti_status(jni, err, "VirtualThreadMount: error in JVMTI NotifyFramePop");
|
460 | 462 |
|
461 |
| - print_frame_event_info(jvmti, jni, thread, method, "VirtualThreadMount", vthread_mounted_count); |
| 463 | + LOG("\nHit #%d: VirtualThreadMount #%d: enabling duplicated FramePop for method: %s::%s on virtual thread: %p\n", |
| 464 | + brkptBreakpointHit, vthread_mounted_count, cname, mname, (void*)thread); |
| 465 | + |
| 466 | + err = jvmti->NotifyFramePop(thread, 0); |
| 467 | + if (err == JVMTI_ERROR_DUPLICATE) { |
| 468 | + LOG("NotifyFramePop at VirtualThreadUnmount event returned expected JVMTI_ERROR_DUPLICATE\n"); |
| 469 | + } else { |
| 470 | + LOG("Failed: NotifyFramePop at VirtualThreadUnmount returned %s(%d) instead of expected JVMTI_ERROR_DUPLICATE\n", |
| 471 | + TranslateError(err), err); |
| 472 | + jni->FatalError("NotifyFramePop error: expected error code JVMTI_ERROR_DUPLICATE"); |
| 473 | + } |
462 | 474 |
|
463 | 475 | // Test SetThreadLocalStorage for virtual thread.
|
464 | 476 | err = jvmti->SetThreadLocalStorage(thread, tls_data2);
|
@@ -497,13 +509,7 @@ VirtualThreadUnmount(jvmtiEnv *jvmti, ...) {
|
497 | 509 | mname = get_method_name(jvmti, jni, method);
|
498 | 510 | cname = get_method_class_name(jvmti, jni, method);
|
499 | 511 |
|
500 |
| - LOG("\nHit #%d: VirtualThreadUnmount #%d: enabling FramePop for method: %s::%s on virtual thread: %p\n", |
501 |
| - brkptBreakpointHit, ++vthread_unmounted_count, cname, mname, (void*)thread); |
502 |
| - |
503 |
| - err = jvmti->NotifyFramePop(thread, 0); |
504 |
| - check_jvmti_status(jni, err, "VirtualThreadUnmount: error in JVMTI NotifyFramePop"); |
505 |
| - |
506 |
| - print_frame_event_info(jvmti, jni, thread, method, "VirtualThreadUnmount", vthread_unmounted_count); |
| 512 | + print_frame_event_info(jvmti, jni, thread, method, "VirtualThreadUnmount", ++vthread_unmounted_count); |
507 | 513 |
|
508 | 514 | deallocate(jvmti, jni, (void*)mname);
|
509 | 515 | deallocate(jvmti, jni, (void*)cname);
|
|
0 commit comments