--- old/src/hotspot/share/runtime/os.cpp 2019-07-11 08:48:52.406153075 +0900 +++ new/src/hotspot/share/runtime/os.cpp 2019-07-11 08:48:52.316152977 +0900 @@ -362,8 +362,25 @@ case SIGBREAK: { // Check if the signal is a trigger to start the Attach Listener - in that // case don't print stack traces. - if (!DisableAttachMechanism && AttachListener::is_init_trigger()) { - continue; + if (!DisableAttachMechanism) { + // Attempt to transit state to AL_INITIALIZING. + AttachListenerState cur_state = AttachListener::transit_state(AL_INITIALIZING, AL_NOT_INITIALIZED); + if (cur_state == AL_INITIALIZING) { + // Attach Listener has been started to initialize. Ignore this signal. + continue; + } else if (cur_state == AL_NOT_INITIALIZED) { + // Start to initialize. + if (!AttachListener::is_init_trigger()) { + // Attach Listener could not be started. + // So we need to transit the state to AL_NOT_INITIALIZED. + AttachListener::set_state(AL_NOT_INITIALIZED); + } + continue; + } else if (AttachListener::check_socket_file()) { + // Attach Listener has been started, but unix domain socket file + // does not exist. So restart Attach Listener. + continue; + } } // Print stack traces // Any SIGBREAK operations added here should make sure to flush