# HG changeset patch # User pliden # Date 1519195600 -3600 # Node ID 1817d118ff66e882600fab061353c7345a81c419 # Parent 010df2533db2d705acdb390cd0b6e60279f78481 8198267: Allow GCId::current_raw() calls from non-NamedThreads Reviewed-by: stefank, kbarrett diff -r 010df2533db2 -r 1817d118ff66 src/hotspot/share/gc/g1/g1PageBasedVirtualSpace.cpp --- a/src/hotspot/share/gc/g1/g1PageBasedVirtualSpace.cpp Tue Feb 20 16:18:25 2018 -0600 +++ b/src/hotspot/share/gc/g1/g1PageBasedVirtualSpace.cpp Wed Feb 21 07:46:40 2018 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2018, 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 @@ -235,13 +235,7 @@ size_t const _page_size; public: G1PretouchTask(char* start_address, char* end_address, size_t page_size) : - AbstractGangTask("G1 PreTouch", - Universe::is_fully_initialized() && - Thread::current()->is_Named_thread() ? GCId::current_raw() : - // During VM initialization there is - // no GC cycle that this task can be - // associated with. - GCId::undefined()), + AbstractGangTask("G1 PreTouch"), _cur_addr(start_address), _start_addr(start_address), _end_addr(end_address), diff -r 010df2533db2 -r 1817d118ff66 src/hotspot/share/gc/shared/gcId.cpp --- a/src/hotspot/share/gc/shared/gcId.cpp Tue Feb 20 16:18:25 2018 -0600 +++ b/src/hotspot/share/gc/shared/gcId.cpp Wed Feb 21 07:46:40 2018 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2018, 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 @@ -44,18 +44,19 @@ } const uint GCId::current() { - assert(currentNamedthread()->gc_id() != undefined(), "Using undefined GC id."); - return current_raw(); + const uint gc_id = currentNamedthread()->gc_id(); + assert(gc_id != undefined(), "Using undefined GC id."); + return gc_id; } -const uint GCId::current_raw() { - return currentNamedthread()->gc_id(); +const uint GCId::current_or_undefined() { + return Thread::current()->is_Named_thread() ? currentNamedthread()->gc_id() : undefined(); } size_t GCId::print_prefix(char* buf, size_t len) { Thread* thread = Thread::current_or_null(); - if (thread != NULL && thread->is_Named_thread()) { - uint gc_id = current_raw(); + if (thread != NULL) { + uint gc_id = current_or_undefined(); if (gc_id != undefined()) { int ret = jio_snprintf(buf, len, "GC(%u) ", gc_id); assert(ret > 0, "Failed to print prefix. Log buffer too small?"); @@ -78,12 +79,12 @@ } GCIdMarkAndRestore::GCIdMarkAndRestore() : _gc_id(GCId::create()) { - _previous_gc_id = GCId::current_raw(); + _previous_gc_id = currentNamedthread()->gc_id(); currentNamedthread()->set_gc_id(_gc_id); } GCIdMarkAndRestore::GCIdMarkAndRestore(uint gc_id) : _gc_id(gc_id) { - _previous_gc_id = GCId::current_raw(); + _previous_gc_id = currentNamedthread()->gc_id(); currentNamedthread()->set_gc_id(_gc_id); } diff -r 010df2533db2 -r 1817d118ff66 src/hotspot/share/gc/shared/gcId.hpp --- a/src/hotspot/share/gc/shared/gcId.hpp Tue Feb 20 16:18:25 2018 -0600 +++ b/src/hotspot/share/gc/shared/gcId.hpp Wed Feb 21 07:46:40 2018 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2018, 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 @@ -38,7 +38,7 @@ // Returns the currently active GC id. Asserts that there is an active GC id. static const uint current(); // Same as current() but can return undefined() if no GC id is currently active - static const uint current_raw(); + static const uint current_or_undefined(); // Returns the next expected GCId. static const uint peek(); static const uint undefined() { return UNDEFINED; } diff -r 010df2533db2 -r 1817d118ff66 src/hotspot/share/gc/shared/workgroup.hpp --- a/src/hotspot/share/gc/shared/workgroup.hpp Tue Feb 20 16:18:25 2018 -0600 +++ b/src/hotspot/share/gc/shared/workgroup.hpp Wed Feb 21 07:46:40 2018 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2018, 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 @@ -59,14 +59,9 @@ const uint _gc_id; public: - AbstractGangTask(const char* name) : + explicit AbstractGangTask(const char* name) : _name(name), - _gc_id(GCId::current_raw()) - {} - - AbstractGangTask(const char* name, const uint gc_id) : - _name(name), - _gc_id(gc_id) + _gc_id(GCId::current_or_undefined()) {} // The abstract work method. diff -r 010df2533db2 -r 1817d118ff66 test/hotspot/gtest/gc/shared/test_oopStorage.cpp --- a/test/hotspot/gtest/gc/shared/test_oopStorage.cpp Tue Feb 20 16:18:25 2018 -0600 +++ b/test/hotspot/gtest/gc/shared/test_oopStorage.cpp Wed Feb 21 07:46:40 2018 +0100 @@ -896,7 +896,7 @@ public: Task(const char* name, Storage* storage, VerifyState* vstate) : - AbstractGangTask(name, GCId::undefined()), + AbstractGangTask(name), _state(storage), _vstate(vstate) {} @@ -915,7 +915,7 @@ class OopStorageTestParIteration::TaskUsingOopsDo : public AbstractGangTask { public: TaskUsingOopsDo(const char* name, OopStorage* storage, VerifyState* vstate) : - AbstractGangTask(name, GCId::undefined()), + AbstractGangTask(name), _state(storage), _vstate(vstate) {}