Skip to content

Better error coverage 2 #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 46 commits into
base: better-error-coverage
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
29de20d
8280991: [XWayland] No displayChanged event after setDisplayMode call
Mar 4, 2025
38b4d46
8351081: Off-by-one error in ShenandoahCardCluster
Mar 4, 2025
20ea218
8336042: Caller/callee param size mismatch in deoptimization causes c…
dean-long Mar 4, 2025
62fa33a
8351158: Incorrect APX EGPR register save ordering
Mar 5, 2025
b1a21b5
8351101: RISC-V: C2: Small improvement to MacroAssembler::revb
RealFYang Mar 5, 2025
75f028b
8348657: compiler/loopopts/superword/TestEquivalentInvariants.java ti…
eme64 Mar 5, 2025
de29ef3
8343191: Cgroup v1 subsystem fails to set subsystem path
sercher Mar 5, 2025
a88e8cd
8350952: Remove some non present files from OPT_SPEED_SRC list
MBaesken Mar 5, 2025
062b7c7
8351115: Test AOTClassLinkingVMOptions.java fails after JDK-8348322
Mar 5, 2025
caaf409
8350546: Several java/net/InetAddress tests fails UnknownHostException
Mar 5, 2025
1404e6d
TestInstance: escape control characters in test description. Fail run…
alexeysemenyukoracle Mar 2, 2025
c50fc5c
More robust msi unpack when wix4 is used
alexeysemenyukoracle Mar 6, 2025
08a2a66
Can run launcher verifier with altered environment variables
alexeysemenyukoracle Mar 5, 2025
ce854a6
Add Executor.setEnvVar()
alexeysemenyukoracle Mar 5, 2025
2ede257
Relax constraints on arguments for string formatting in JPackageStrin…
alexeysemenyukoracle Feb 28, 2025
e74c14c
Make CannedFormattedString a record and add null checks. Add CannedFo…
alexeysemenyukoracle Feb 28, 2025
f4381f0
JPackageCommand can derive app name from jpackage command line withou…
alexeysemenyukoracle Feb 28, 2025
f2cd651
Create fake runtime in unique directory
alexeysemenyukoracle Mar 7, 2025
4fc37b2
Support multiple output validators in JPackageCommand
alexeysemenyukoracle Mar 6, 2025
185e38a
Make PackageType.getName() public and rename it into PackageType.getT…
alexeysemenyukoracle Feb 28, 2025
2838a08
Move token substitution in generic TokenReplace class.
alexeysemenyukoracle Mar 2, 2025
9398463
More negative tests
alexeysemenyukoracle Feb 28, 2025
2706c90
Better testing of DottedVersion: verify exception error messages
alexeysemenyukoracle Feb 28, 2025
5197f61
Better test coverage for bad app image
alexeysemenyukoracle Feb 28, 2025
a4288bb
Test error reported by jpackage when `--temp` arg points to existing …
alexeysemenyukoracle Mar 2, 2025
fefdf4d
Remove MacAppStoreRuntimeTest.java. The positive test duplicates othe…
alexeysemenyukoracle Mar 3, 2025
d85d67f
Remove redundant PredefinedAppImageErrorTest.java. It duplicates Erro…
alexeysemenyukoracle Mar 3, 2025
915a15c
Remove redundant MacAppStoreJlinkOptionsTest.testWithoutStripNativeCo…
alexeysemenyukoracle Mar 3, 2025
2aa3de5
Better negative testing in MainClassTest
alexeysemenyukoracle Mar 6, 2025
0c32b27
NonExistentTest is redundant. It duplicates functionality of ErrorTes…
alexeysemenyukoracle Mar 6, 2025
810aac3
ModulePathTest: use CannedFormattedString to validate error output
alexeysemenyukoracle Mar 6, 2025
30d42dc
FileAssociationsTest: use CannedFormattedString
alexeysemenyukoracle Mar 6, 2025
3810b57
Make JavaOptionsEqualsTest and JavaOptionsTest work when external fak…
alexeysemenyukoracle Mar 6, 2025
e853e56
LinuxResourceTest: use CannedFormattedString
alexeysemenyukoracle Mar 6, 2025
cc03a14
Enhance RuntimePackageTest to test that jpackage can derive package n…
alexeysemenyukoracle Mar 6, 2025
4835cc5
Remove negative tests from AppVersionTest. ErrorTest tests invalid ap…
alexeysemenyukoracle Feb 28, 2025
656a8a3
CommandLine.parse() doesn't throw `java.io.FileNotFoundException` whe…
alexeysemenyukoracle Feb 28, 2025
f810e23
DeployParams: replace {"ERR_MissingArgument", "--input"} with "error.…
alexeysemenyukoracle Feb 28, 2025
8e2db23
Update copyright year
alexeysemenyukoracle Mar 7, 2025
dc5974f
Ran ./bin/blessed-modifier-order.sh
alexeysemenyukoracle Mar 7, 2025
8d72812
Ignore default runtime if jpackage command line has `--jlink-options`…
alexeysemenyukoracle Mar 7, 2025
3fe3eed
Give unique descriptions to signing tests
alexeysemenyukoracle Mar 7, 2025
eda0efe
Update copyright year
alexeysemenyukoracle Mar 7, 2025
e6ad500
Fix Unicode signing certificate index
alexeysemenyukoracle Mar 10, 2025
5458514
Fix typo
alexeysemenyukoracle Mar 10, 2025
3fdf653
Use Executor.trace() instead of TKit.trace()
alexeysemenyukoracle Mar 10, 2025
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
3 changes: 0 additions & 3 deletions make/hotspot/lib/JvmFeatures.gmk
Original file line number Diff line number Diff line change
Expand Up @@ -224,11 +224,9 @@ ifeq ($(call check-jvm-feature, opt-size), true)
frame_ppc.cpp \
frame_s390.cpp \
frame_x86.cpp \
genCollectedHeap.cpp \
generation.cpp \
growableArray.cpp \
handles.cpp \
hashtable.cpp \
heap.cpp \
icache.cpp \
icache_arm.cpp \
Expand All @@ -246,7 +244,6 @@ ifeq ($(call check-jvm-feature, opt-size), true)
linkResolver.cpp \
klass.cpp \
klassVtable.cpp \
markSweep.cpp \
memRegion.cpp \
memoryPool.cpp \
method.cpp \
Expand Down
3 changes: 2 additions & 1 deletion src/hotspot/cpu/aarch64/abstractInterpreter_aarch64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ void AbstractInterpreter::layout_activation(Method* method,

#ifdef ASSERT
if (caller->is_interpreted_frame()) {
assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement");
assert(locals <= caller->interpreter_frame_expression_stack(), "bad placement");
assert(locals >= interpreter_frame->sender_sp() + max_locals - 1, "bad placement");
}
#endif

Expand Down
9 changes: 9 additions & 0 deletions src/hotspot/cpu/arm/abstractInterpreter_arm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,15 @@ void AbstractInterpreter::layout_activation(Method* method,

intptr_t* locals = interpreter_frame->sender_sp() + max_locals - 1;

#ifdef ASSERT
if (caller->is_interpreted_frame()) {
// Test exact placement on top of caller args
intptr_t* l2 = caller->interpreter_frame_last_sp() + caller_actual_parameters - 1;
assert(l2 <= caller->interpreter_frame_expression_stack(), "bad placement");
assert(l2 >= locals, "bad placement");
}
#endif

interpreter_frame->interpreter_frame_set_locals(locals);
BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin();
BasicObjectLock* monbot = montop - moncount;
Expand Down
9 changes: 9 additions & 0 deletions src/hotspot/cpu/ppc/abstractInterpreter_ppc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,15 @@ void AbstractInterpreter::layout_activation(Method* method,
caller->interpreter_frame_esp() + caller_actual_parameters :
caller->sp() + method->max_locals() - 1 + (frame::java_abi_size / Interpreter::stackElementSize);

#ifdef ASSERT
if (caller->is_interpreted_frame()) {
assert(locals_base <= caller->interpreter_frame_expression_stack(), "bad placement");
const int caller_abi_bytesize = (is_bottom_frame ? frame::top_ijava_frame_abi_size : frame::parent_ijava_frame_abi_size);
intptr_t* l2 = caller->sp() + method->max_locals() - 1 + (caller_abi_bytesize / Interpreter::stackElementSize);
assert(locals_base >= l2, "bad placement");
}
#endif

intptr_t* monitor_base = caller->sp() - frame::ijava_state_size / Interpreter::stackElementSize;
intptr_t* monitor = monitor_base - (moncount * frame::interpreter_frame_monitor_size());
intptr_t* esp_base = monitor - 1;
Expand Down
3 changes: 2 additions & 1 deletion src/hotspot/cpu/riscv/abstractInterpreter_riscv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,8 @@ void AbstractInterpreter::layout_activation(Method* method,

#ifdef ASSERT
if (caller->is_interpreted_frame()) {
assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement");
assert(locals <= caller->interpreter_frame_expression_stack(), "bad placement");
assert(locals >= interpreter_frame->sender_sp() + max_locals - 1, "bad placement");
}
#endif

Expand Down
1 change: 0 additions & 1 deletion src/hotspot/cpu/riscv/macroAssembler_riscv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2892,7 +2892,6 @@ void MacroAssembler::revb(Register Rd, Register Rs, Register tmp1, Register tmp2
slli(tmp1, tmp1, 8);
}
srli(Rd, Rs, 56);
zext(Rd, Rd, 8);
orr(Rd, tmp1, Rd);
}

Expand Down
7 changes: 7 additions & 0 deletions src/hotspot/cpu/s390/abstractInterpreter_s390.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,13 @@ void AbstractInterpreter::layout_activation(Method* method,
intptr_t* sender_sp;
if (caller->is_interpreted_frame()) {
sender_sp = caller->interpreter_frame_top_frame_sp();
#ifdef ASSERT
assert(locals_base <= caller->interpreter_frame_expression_stack(), "bad placement");
// Test caller-aligned placement vs callee-aligned
intptr_t* l2 = (caller->sp() + method->max_locals() - 1 +
frame::z_parent_ijava_frame_abi_size / Interpreter::stackElementSize);
assert(locals_base >= l2, "bad placement");
#endif
} else if (caller->is_compiled_frame()) {
sender_sp = caller->fp() - caller->cb()->frame_size();
// The bottom frame's sender_sp is its caller's unextended_sp.
Expand Down
5 changes: 4 additions & 1 deletion src/hotspot/cpu/x86/abstractInterpreter_x86.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,10 @@ void AbstractInterpreter::layout_activation(Method* method,

#ifdef ASSERT
if (caller->is_interpreted_frame()) {
assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement");
// Test exact placement on top of caller args
intptr_t* l2 = caller->interpreter_frame_last_sp() + caller_actual_parameters - 1;
assert(l2 <= caller->interpreter_frame_expression_stack(), "bad placement");
assert(l2 >= locals, "bad placement");
}
#endif

Expand Down
35 changes: 17 additions & 18 deletions src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,24 +101,23 @@ class RegisterSaver {
ymm_off = xmm_off + (XSAVE_AREA_YMM_BEGIN - XSAVE_AREA_BEGIN)/BytesPerInt,
DEF_YMM_OFFS(0),
DEF_YMM_OFFS(1),
// 2..15 are implied in range usage
r31_off = xmm_off + (XSAVE_AREA_EGPRS - XSAVE_AREA_BEGIN)/BytesPerInt,
r31H_off,
r30_off, r30H_off,
r29_off, r29H_off,
r28_off, r28H_off,
r27_off, r27H_off,
r26_off, r26H_off,
r25_off, r25H_off,
r24_off, r24H_off,
r23_off, r23H_off,
r22_off, r22H_off,
r21_off, r21H_off,
r20_off, r20H_off,
r19_off, r19H_off,
r18_off, r18H_off,
r16_off = xmm_off + (XSAVE_AREA_EGPRS - XSAVE_AREA_BEGIN)/BytesPerInt,
r16H_off,
r17_off, r17H_off,
r16_off, r16H_off,
r18_off, r18H_off,
r19_off, r19H_off,
r20_off, r20H_off,
r21_off, r21H_off,
r22_off, r22H_off,
r23_off, r23H_off,
r24_off, r24H_off,
r25_off, r25H_off,
r26_off, r26H_off,
r27_off, r27H_off,
r28_off, r28H_off,
r29_off, r29H_off,
r30_off, r30H_off,
r31_off, r31H_off,
opmask_off = xmm_off + (XSAVE_AREA_OPMASK_BEGIN - XSAVE_AREA_BEGIN)/BytesPerInt,
DEF_OPMASK_OFFS(0),
DEF_OPMASK_OFFS(1),
Expand Down Expand Up @@ -265,7 +264,7 @@ OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_
if (UseAPX) {
int base_addr = XSAVE_AREA_EGPRS;
off = 0;
for(int n = 16; n < Register::number_of_registers; n++) {
for (int n = 16; n < Register::number_of_registers; n++) {
__ movq(Address(rsp, base_addr+(off++*8)), as_Register(n));
}
}
Expand Down
30 changes: 23 additions & 7 deletions src/hotspot/os/linux/cgroupUtil_linux.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2024, Red Hat, Inc.
* Copyright (c) 2024, 2025, Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -49,20 +49,27 @@ int CgroupUtil::processor_count(CgroupCpuController* cpu_ctrl, int host_cpus) {
}

void CgroupUtil::adjust_controller(CgroupMemoryController* mem) {
assert(mem->cgroup_path() != nullptr, "invariant");
if (strstr(mem->cgroup_path(), "../") != nullptr) {
log_warning(os, container)("Cgroup memory controller path at '%s' seems to have moved to '%s', detected limits won't be accurate",
mem->mount_point(), mem->cgroup_path());
mem->set_subsystem_path("/");
return;
}
if (!mem->needs_hierarchy_adjustment()) {
// nothing to do
return;
}
log_trace(os, container)("Adjusting controller path for memory: %s", mem->subsystem_path());
assert(mem->cgroup_path() != nullptr, "invariant");
char* orig = os::strdup(mem->cgroup_path());
char* cg_path = os::strdup(orig);
char* last_slash;
assert(cg_path[0] == '/', "cgroup path must start with '/'");
julong phys_mem = os::Linux::physical_memory();
char* limit_cg_path = nullptr;
jlong limit = mem->read_memory_limit_in_bytes(phys_mem);
jlong lowest_limit = phys_mem;
jlong lowest_limit = limit < 0 ? phys_mem : limit;
julong orig_limit = ((julong)lowest_limit) != phys_mem ? lowest_limit : phys_mem;
while ((last_slash = strrchr(cg_path, '/')) != cg_path) {
*last_slash = '\0'; // strip path
// update to shortened path and try again
Expand All @@ -83,7 +90,7 @@ void CgroupUtil::adjust_controller(CgroupMemoryController* mem) {
limit_cg_path = os::strdup("/");
}
assert(lowest_limit >= 0, "limit must be positive");
if ((julong)lowest_limit != phys_mem) {
if ((julong)lowest_limit != orig_limit) {
// we've found a lower limit anywhere in the hierarchy,
// set the path to the limit path
assert(limit_cg_path != nullptr, "limit path must be set");
Expand All @@ -93,6 +100,7 @@ void CgroupUtil::adjust_controller(CgroupMemoryController* mem) {
mem->subsystem_path(),
lowest_limit);
} else {
log_trace(os, container)("Lowest limit was: " JLONG_FORMAT, lowest_limit);
log_trace(os, container)("No lower limit found for memory in hierarchy %s, "
"adjusting to original path %s",
mem->mount_point(), orig);
Expand All @@ -104,19 +112,26 @@ void CgroupUtil::adjust_controller(CgroupMemoryController* mem) {
}

void CgroupUtil::adjust_controller(CgroupCpuController* cpu) {
assert(cpu->cgroup_path() != nullptr, "invariant");
if (strstr(cpu->cgroup_path(), "../") != nullptr) {
log_warning(os, container)("Cgroup cpu controller path at '%s' seems to have moved to '%s', detected limits won't be accurate",
cpu->mount_point(), cpu->cgroup_path());
cpu->set_subsystem_path("/");
return;
}
if (!cpu->needs_hierarchy_adjustment()) {
// nothing to do
return;
}
log_trace(os, container)("Adjusting controller path for cpu: %s", cpu->subsystem_path());
assert(cpu->cgroup_path() != nullptr, "invariant");
char* orig = os::strdup(cpu->cgroup_path());
char* cg_path = os::strdup(orig);
char* last_slash;
assert(cg_path[0] == '/', "cgroup path must start with '/'");
int host_cpus = os::Linux::active_processor_count();
int cpus = CgroupUtil::processor_count(cpu, host_cpus);
int lowest_limit = host_cpus;
int lowest_limit = cpus < host_cpus ? cpus: host_cpus;
int orig_limit = lowest_limit != host_cpus ? lowest_limit : host_cpus;
char* limit_cg_path = nullptr;
while ((last_slash = strrchr(cg_path, '/')) != cg_path) {
*last_slash = '\0'; // strip path
Expand All @@ -138,7 +153,7 @@ void CgroupUtil::adjust_controller(CgroupCpuController* cpu) {
limit_cg_path = os::strdup(cg_path);
}
assert(lowest_limit >= 0, "limit must be positive");
if (lowest_limit != host_cpus) {
if (lowest_limit != orig_limit) {
// we've found a lower limit anywhere in the hierarchy,
// set the path to the limit path
assert(limit_cg_path != nullptr, "limit path must be set");
Expand All @@ -148,6 +163,7 @@ void CgroupUtil::adjust_controller(CgroupCpuController* cpu) {
cpu->subsystem_path(),
lowest_limit);
} else {
log_trace(os, container)("Lowest limit was: %d", lowest_limit);
log_trace(os, container)("No lower limit found for cpu in hierarchy %s, "
"adjusting to original path %s",
cpu->mount_point(), orig);
Expand Down
77 changes: 63 additions & 14 deletions src/hotspot/os/linux/cgroupV1Subsystem_linux.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2019, 2025, 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
Expand Down Expand Up @@ -37,6 +37,47 @@
/*
* Set directory to subsystem specific files based
* on the contents of the mountinfo and cgroup files.
*
* The method determines whether it runs in
* - host mode
* - container mode
*
* In the host mode, _root is equal to "/" and
* the subsystem path is equal to the _mount_point path
* joined with cgroup_path.
*
* In the container mode, it can be two possibilities:
* - private namespace (cgroupns=private)
* - host namespace (cgroupns=host, default mode in cgroup V1 hosts)
*
* Private namespace is equivalent to the host mode, i.e.
* the subsystem path is set by concatenating
* _mount_point and cgroup_path.
*
* In the host namespace, _root is equal to host's cgroup path
* of the control group to which the containerized process
* belongs to at the moment of creation. The mountinfo and
* cgroup files are mirrored from the host, while the subsystem
* specific files are mapped directly at _mount_point, i.e.
* at /sys/fs/cgroup/<controller>/, the subsystem path is
* then set equal to _mount_point.
*
* A special case of the subsystem path is when a cgroup path
* includes a subgroup, when a containerized process was associated
* with an existing cgroup, that is different from cgroup
* in which the process has been created.
* Here, the _root is equal to the host's initial cgroup path,
* cgroup_path will be equal to host's new cgroup path.
* As host cgroup hierarchies are not accessible in the container,
* it needs to be determined which part of cgroup path
* is accessible inside container, i.e. mapped under
* /sys/fs/cgroup/<controller>/<subgroup>.
* In Docker default setup, host's cgroup path can be
* of the form: /docker/<CONTAINER_ID>/<subgroup>,
* from which only <subgroup> is mapped.
* The method trims cgroup path from left, until the subgroup
* component is found. The subsystem path will be set to
* the _mount_point joined with the subgroup path.
*/
void CgroupV1Controller::set_subsystem_path(const char* cgroup_path) {
if (_cgroup_path != nullptr) {
Expand All @@ -49,28 +90,36 @@ void CgroupV1Controller::set_subsystem_path(const char* cgroup_path) {
_cgroup_path = os::strdup(cgroup_path);
stringStream ss;
if (_root != nullptr && cgroup_path != nullptr) {
ss.print_raw(_mount_point);
if (strcmp(_root, "/") == 0) {
ss.print_raw(_mount_point);
// host processes and containers with cgroupns=private
if (strcmp(cgroup_path,"/") != 0) {
ss.print_raw(cgroup_path);
}
_path = os::strdup(ss.base());
} else {
if (strcmp(_root, cgroup_path) == 0) {
ss.print_raw(_mount_point);
_path = os::strdup(ss.base());
} else {
char *p = strstr((char*)cgroup_path, _root);
if (p != nullptr && p == _root) {
if (strlen(cgroup_path) > strlen(_root)) {
ss.print_raw(_mount_point);
const char* cg_path_sub = cgroup_path + strlen(_root);
ss.print_raw(cg_path_sub);
_path = os::strdup(ss.base());
// containers with cgroupns=host, default setting is _root==cgroup_path
if (strcmp(_root, cgroup_path) != 0) {
if (*cgroup_path != '\0' && strcmp(cgroup_path, "/") != 0) {
// When moved to a subgroup, between subgroups, the path suffix will change.
const char *suffix = cgroup_path;
while (suffix != nullptr) {
stringStream pp;
pp.print_raw(_mount_point);
pp.print_raw(suffix);
if (os::file_exists(pp.base())) {
ss.print_raw(suffix);
if (suffix != cgroup_path) {
log_trace(os, container)("set_subsystem_path: cgroup v1 path reduced to: %s.", suffix);
}
break;
}
log_trace(os, container)("set_subsystem_path: skipped non-existent directory: %s.", suffix);
suffix = strchr(suffix + 1, '/');
}
}
}
}
_path = os::strdup(ss.base());
}
}

Expand Down
6 changes: 5 additions & 1 deletion src/hotspot/os/linux/cgroupV2Subsystem_linux.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020, 2022, Red Hat Inc.
* Copyright (c) 2020, 2025, Red Hat Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -292,6 +292,10 @@ jlong memory_swap_limit_value(CgroupV2Controller* ctrl) {
}

void CgroupV2Controller::set_subsystem_path(const char* cgroup_path) {
if (_cgroup_path != nullptr) {
os::free(_cgroup_path);
}
_cgroup_path = os::strdup(cgroup_path);
if (_path != nullptr) {
os::free(_path);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ class ShenandoahCardCluster: public CHeapObj<mtGC> {

ShenandoahCardCluster(ShenandoahDirectCardMarkRememberedSet* rs) {
_rs = rs;
_object_starts = NEW_C_HEAP_ARRAY(crossing_info, rs->total_cards(), mtGC);
_object_starts = NEW_C_HEAP_ARRAY(crossing_info, rs->total_cards() + 1, mtGC); // the +1 is to account for card table guarding entry
for (size_t i = 0; i < rs->total_cards(); i++) {
_object_starts[i].short_word = 0;
}
Expand Down
2 changes: 2 additions & 0 deletions src/hotspot/share/interpreter/bytecode.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,8 @@ class Bytecode_invoke: public Bytecode_member_ref {

bool has_appendix();

bool has_member_arg() const;

int size_of_parameters() const;

private:
Expand Down
Loading
Loading