diff -r b026a43e1809 -r 31ec3e55fa3d src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java Tue Oct 29 09:34:23 2019 +0800 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java Tue Oct 29 11:33:25 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2019, 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 @@ -255,20 +255,22 @@ staleMetadata = true; } - // Lock around setOutput ensures that other threads dosn't - // emit event after setOutput and unregister the event class, before a call + // Lock around setOutput ensures that other threads don't + // emit events after setOutput and unregister the event class, before a call // to storeDescriptorInJVM synchronized void setOutput(String filename) { + if (staleMetadata) { + storeDescriptorInJVM(); + } jvm.setOutput(filename); unregisterUnloaded(); if (unregistered) { - staleMetadata = typeLibrary.clearUnregistered(); + if (typeLibrary.clearUnregistered()) { + storeDescriptorInJVM(); + } unregistered = false; } - if (staleMetadata) { - storeDescriptorInJVM(); - } } private void unregisterUnloaded() {