Skip to content

Commit 4922a35

Browse files
committed
Merge
2 parents 83fff05 + 82cc03f commit 4922a35

4 files changed

Lines changed: 19 additions & 8 deletions

File tree

src/hotspot/share/gc/shenandoah/shenandoahRootVerifier.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
STATIC_ASSERT((static_cast<uint>(ShenandoahRootVerifier::AllRoots) + 1) > static_cast<uint>(ShenandoahRootVerifier::AllRoots));
4747

4848
ShenandoahRootVerifier::ShenandoahRootVerifier(RootTypes types) : _types(types) {
49+
Threads::change_thread_claim_token();
4950
}
5051

5152
void ShenandoahRootVerifier::excludes(RootTypes types) {
@@ -138,7 +139,7 @@ void ShenandoahRootVerifier::roots_do(OopClosure* oops) {
138139
// Do thread roots the last. This allows verification code to find
139140
// any broken objects from those special roots first, not the accidental
140141
// dangling reference from the thread root.
141-
Threads::possibly_parallel_oops_do(false, oops, &blobs);
142+
Threads::possibly_parallel_oops_do(true, oops, &blobs);
142143
}
143144

144145
void ShenandoahRootVerifier::strong_roots_do(OopClosure* oops) {
@@ -159,7 +160,7 @@ void ShenandoahRootVerifier::strong_roots_do(OopClosure* oops) {
159160
// Do thread roots the last. This allows verification code to find
160161
// any broken objects from those special roots first, not the accidental
161162
// dangling reference from the thread root.
162-
Threads::possibly_parallel_oops_do(false, oops, &blobs);
163+
Threads::possibly_parallel_oops_do(true, oops, &blobs);
163164
}
164165

165166
void ShenandoahRootVerifier::serial_weak_roots_do(OopClosure* cl) {

src/hotspot/share/opto/arraycopynode.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,9 @@ class ArrayCopyNode : public CallNode {
112112
bool finish_transform(PhaseGVN *phase, bool can_reshape,
113113
Node* ctl, Node *mem);
114114
static bool may_modify_helper(const TypeOopPtr *t_oop, Node* n, PhaseTransform *phase, CallNode*& call);
115-
115+
public:
116116
static Node* load(BarrierSetC2* bs, PhaseGVN *phase, Node*& ctl, MergeMemNode* mem, Node* addr, const TypePtr* adr_type, const Type *type, BasicType bt);
117+
private:
117118
void store(BarrierSetC2* bs, PhaseGVN *phase, Node*& ctl, MergeMemNode* mem, Node* addr, const TypePtr* adr_type, Node* val, const Type *type, BasicType bt);
118119

119120
public:
@@ -153,7 +154,7 @@ class ArrayCopyNode : public CallNode {
153154
bool is_clone_array() const { assert(_kind != None, "should bet set"); return _kind == CloneArray; }
154155
// is_clone_oop_array is used when oop arrays need GC barriers
155156
bool is_clone_oop_array() const { assert(_kind != None, "should bet set"); return _kind == CloneOopArray; }
156-
// is_clonebasic - is true for any type of clone that doesn't need a barrier.
157+
// is_clonebasic - is true for any type of clone that doesn't need a writebarrier.
157158
bool is_clonebasic() const { assert(_kind != None, "should bet set"); return _kind == CloneInst || _kind == CloneArray; }
158159
bool is_copyof() const { assert(_kind != None, "should bet set"); return _kind == CopyOf; }
159160
bool is_copyof_validated() const { assert(_kind != None, "should bet set"); return _kind == CopyOf && _arguments_validated; }

src/hotspot/share/opto/macro.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,9 @@ Node* PhaseMacroExpand::make_arraycopy_load(ArrayCopyNode* ac, intptr_t offset,
367367
Node* base = ac->in(ArrayCopyNode::Src);
368368
Node* adr = _igvn.transform(new AddPNode(base, base, MakeConX(offset)));
369369
const TypePtr* adr_type = _igvn.type(base)->is_ptr()->add_offset(offset);
370-
res = LoadNode::make(_igvn, ctl, mem, adr, adr_type, type, bt, MemNode::unordered, LoadNode::UnknownControl);
370+
MergeMemNode* mergemen = MergeMemNode::make(mem);
371+
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
372+
res = ArrayCopyNode::load(bs, &_igvn, ctl, mergemen, adr, adr_type, type, bt);
371373
} else {
372374
if (ac->modifies(offset, offset, &_igvn, true)) {
373375
assert(ac->in(ArrayCopyNode::Dest) == alloc->result_cast(), "arraycopy destination should be allocation's result");
@@ -405,11 +407,12 @@ Node* PhaseMacroExpand::make_arraycopy_load(ArrayCopyNode* ac, intptr_t offset,
405407
return NULL;
406408
}
407409
}
408-
res = LoadNode::make(_igvn, ctl, mem, adr, adr_type, type, bt, MemNode::unordered, LoadNode::UnknownControl);
410+
MergeMemNode* mergemen = MergeMemNode::make(mem);
411+
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
412+
res = ArrayCopyNode::load(bs, &_igvn, ctl, mergemen, adr, adr_type, type, bt);
409413
}
410414
}
411415
if (res != NULL) {
412-
res = _igvn.transform(res);
413416
if (ftype->isa_narrowoop()) {
414417
// PhaseMacroExpand::scalar_replacement adds DecodeN nodes
415418
res = _igvn.transform(new EncodePNode(res, ftype));

src/java.base/share/classes/java/net/NetworkInterface.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -576,7 +576,13 @@ public boolean isVirtual() {
576576
* as this object.
577577
* <p>
578578
* Two instances of {@code NetworkInterface} represent the same
579-
* NetworkInterface if both name and addrs are the same for both.
579+
* NetworkInterface if both the name and the set of {@code InetAddress}es
580+
* bound to the interfaces are equal.
581+
*
582+
* @apiNote two {@code NetworkInterface} objects referring to the same
583+
* underlying interface may not compare equal if the addresses
584+
* of the underlying interface are being dynamically updated by
585+
* the system.
580586
*
581587
* @param obj the object to compare against.
582588
* @return {@code true} if the objects are the same;

0 commit comments

Comments
 (0)