2497 MutexLockerEx ml(SR_lock(), Mutex::_no_safepoint_check_flag);
2498
2499 clear_external_suspend();
2500
2501 if (is_ext_suspended()) {
2502 clear_ext_suspended();
2503 SR_lock()->notify_all();
2504 }
2505 }
2506
2507 size_t JavaThread::_stack_red_zone_size = 0;
2508 size_t JavaThread::_stack_yellow_zone_size = 0;
2509 size_t JavaThread::_stack_reserved_zone_size = 0;
2510 size_t JavaThread::_stack_shadow_zone_size = 0;
2511
2512 void JavaThread::create_stack_guard_pages() {
2513 if (!os::uses_stack_guard_pages() || _stack_guard_state != stack_guard_unused) { return; }
2514 address low_addr = stack_end();
2515 size_t len = stack_guard_zone_size();
2516
2517 int must_commit = os::must_commit_stack_guard_pages();
2518 // warning("Guarding at " PTR_FORMAT " for len " SIZE_FORMAT "\n", low_addr, len);
2519
2520 if (must_commit && !os::create_stack_guard_pages((char *) low_addr, len)) {
2521 log_warning(os, thread)("Attempt to allocate stack guard pages failed.");
2522 return;
2523 }
2524
2525 if (os::guard_memory((char *) low_addr, len)) {
2526 _stack_guard_state = stack_guard_enabled;
2527 } else {
2528 log_warning(os, thread)("Attempt to protect stack guard pages failed ("
2529 PTR_FORMAT "-" PTR_FORMAT ").", p2i(low_addr), p2i(low_addr + len));
2530 if (os::uncommit_memory((char *) low_addr, len)) {
2531 log_warning(os, thread)("Attempt to deallocate stack guard pages failed.");
2532 }
2533 return;
2534 }
2535
2536 log_debug(os, thread)("Thread " UINTX_FORMAT " stack guard pages activated: "
|
2497 MutexLockerEx ml(SR_lock(), Mutex::_no_safepoint_check_flag);
2498
2499 clear_external_suspend();
2500
2501 if (is_ext_suspended()) {
2502 clear_ext_suspended();
2503 SR_lock()->notify_all();
2504 }
2505 }
2506
2507 size_t JavaThread::_stack_red_zone_size = 0;
2508 size_t JavaThread::_stack_yellow_zone_size = 0;
2509 size_t JavaThread::_stack_reserved_zone_size = 0;
2510 size_t JavaThread::_stack_shadow_zone_size = 0;
2511
2512 void JavaThread::create_stack_guard_pages() {
2513 if (!os::uses_stack_guard_pages() || _stack_guard_state != stack_guard_unused) { return; }
2514 address low_addr = stack_end();
2515 size_t len = stack_guard_zone_size();
2516
2517 assert(is_aligned(low_addr, os::vm_page_size()), "Stack base should be the start of a page");
2518 assert(is_aligned(len, os::vm_page_size()), "Stack size should be a multiple of page size");
2519
2520 int must_commit = os::must_commit_stack_guard_pages();
2521 // warning("Guarding at " PTR_FORMAT " for len " SIZE_FORMAT "\n", low_addr, len);
2522
2523 if (must_commit && !os::create_stack_guard_pages((char *) low_addr, len)) {
2524 log_warning(os, thread)("Attempt to allocate stack guard pages failed.");
2525 return;
2526 }
2527
2528 if (os::guard_memory((char *) low_addr, len)) {
2529 _stack_guard_state = stack_guard_enabled;
2530 } else {
2531 log_warning(os, thread)("Attempt to protect stack guard pages failed ("
2532 PTR_FORMAT "-" PTR_FORMAT ").", p2i(low_addr), p2i(low_addr + len));
2533 if (os::uncommit_memory((char *) low_addr, len)) {
2534 log_warning(os, thread)("Attempt to deallocate stack guard pages failed.");
2535 }
2536 return;
2537 }
2538
2539 log_debug(os, thread)("Thread " UINTX_FORMAT " stack guard pages activated: "
|