8273221: Guard GCIdMark against nested calls

Reviewed-by: tschatzl, kbarrett
This commit is contained in:
Albert Mingkun Yang 2021-09-06 08:11:34 +00:00
parent 4d25e6f6c7
commit b4e5b28b86
2 changed files with 5 additions and 6 deletions

View File

@ -67,14 +67,16 @@ size_t GCId::print_prefix(char* buf, size_t len) {
return 0;
}
GCIdMark::GCIdMark() : _previous_gc_id(currentNamedthread()->gc_id()) {
GCIdMark::GCIdMark() {
assert(currentNamedthread()->gc_id() == GCId::undefined(), "nested");
currentNamedthread()->set_gc_id(GCId::create());
}
GCIdMark::GCIdMark(uint gc_id) : _previous_gc_id(currentNamedthread()->gc_id()) {
GCIdMark::GCIdMark(uint gc_id) {
assert(currentNamedthread()->gc_id() == GCId::undefined(), "nested");
currentNamedthread()->set_gc_id(gc_id);
}
GCIdMark::~GCIdMark() {
currentNamedthread()->set_gc_id(_previous_gc_id);
currentNamedthread()->set_gc_id(GCId::undefined());
}

View File

@ -47,9 +47,6 @@ public:
};
class GCIdMark : public StackObj {
private:
const uint _previous_gc_id;
public:
GCIdMark();
GCIdMark(uint gc_id);