8233416: JFR: assert((((((klass)->trace_id()) & (((1 << 1) << 8) | (JfrTraceIdEpoch::in_use_this_epoch_bit()))) != 0))) failed: invariant

Reviewed-by: egahlin
This commit is contained in:
Markus Grönlund 2019-11-07 15:53:25 +01:00
parent b7dcab5af0
commit 9ec96c1117
2 changed files with 7 additions and 17 deletions

View File

@ -42,7 +42,10 @@
template <typename T> template <typename T>
inline traceid set_used_and_get(const T* type) { inline traceid set_used_and_get(const T* type) {
assert(type != NULL, "invariant"); assert(type != NULL, "invariant");
SET_USED_THIS_EPOCH(type); if (SHOULD_TAG(type)) {
SET_USED_THIS_EPOCH(type);
JfrTraceIdEpoch::set_changed_tag_state();
}
assert(USED_THIS_EPOCH(type), "invariant"); assert(USED_THIS_EPOCH(type), "invariant");
return TRACE_ID(type); return TRACE_ID(type);
} }
@ -58,19 +61,10 @@ inline traceid JfrTraceId::get(const Thread* t) {
} }
inline traceid JfrTraceId::use(const Klass* klass) { inline traceid JfrTraceId::use(const Klass* klass) {
assert(klass != NULL, "invariant"); return set_used_and_get(klass);
if (SHOULD_TAG(klass)) {
SET_USED_THIS_EPOCH(klass);
assert(USED_THIS_EPOCH(klass), "invariant");
JfrTraceIdEpoch::set_changed_tag_state();
return get(klass);
}
assert(USED_THIS_EPOCH(klass), "invariant");
return TRACE_ID(klass);
} }
inline traceid JfrTraceId::use(const Method* method) { inline traceid JfrTraceId::use(const Method* method) {
assert(method != NULL, "invariant");
return use(method->method_holder(), method); return use(method->method_holder(), method);
} }
@ -91,12 +85,10 @@ inline traceid JfrTraceId::use(const Klass* klass, const Method* method) {
} }
inline traceid JfrTraceId::use(const ModuleEntry* module) { inline traceid JfrTraceId::use(const ModuleEntry* module) {
assert(module != NULL, "invariant");
return set_used_and_get(module); return set_used_and_get(module);
} }
inline traceid JfrTraceId::use(const PackageEntry* package) { inline traceid JfrTraceId::use(const PackageEntry* package) {
assert(package != NULL, "invariant");
return set_used_and_get(package); return set_used_and_get(package);
} }

View File

@ -40,10 +40,8 @@ static const int meta_offset = low_offset - 1;
inline void set_bits(jbyte bits, jbyte volatile* const dest) { inline void set_bits(jbyte bits, jbyte volatile* const dest) {
assert(dest != NULL, "invariant"); assert(dest != NULL, "invariant");
if (bits != (*dest & bits)) { *dest |= bits;
*dest |= bits; OrderAccess::storestore();
OrderAccess::storestore();
}
} }
inline jbyte traceid_and(jbyte current, jbyte bits) { inline jbyte traceid_and(jbyte current, jbyte bits) {