Hi Alex, It seems to be hanged in check_socket_file() because AttachListener::deque() could not return due to safepoint. So it is good idea to use ThreadBlockInVM, but I think we can change as below to reduce overhead:
``` { ThreadBlockInVM tbivm(JavaThread::current()); while (AttachListener::transit_state(AL_INITIALIZING, AL_NOT_INITIALIZED) != AL_NOT_INITIALIZED) { os::naked_yield(); } } ``` It might consume much CPU time with long safepoint, but I think it is corner case because this issue occurs intermittently. Thanks, Yasumasa On 2020/05/09 10:14, Alex Menkov wrote:
Hi all, please review the fix for https://bugs.openjdk.java.net/browse/JDK-8235211 webrev: http://cr.openjdk.java.net/~amenkov/jdk15/RemovingUnixDomainSocket/webrev/ Test failures are caused by deadlock during attach listener restarting: check_socket_file function aborts socket listening and waits while attach listener state becomes AL_NOT_INITIALIZED (it happens when AttachListener::dequeue returns NULL). AttachListener::dequeue method is blocked in ThreadBlockInVM dtor. To solve it ThreadBlockInVM was added inside waiting cycle in check_socket_file. Other changes: - made _listener (and _shutdown for aix) volatile as they are used by 2 threads (attach listener thread and signal handler thread) without synchronization; - added close() for listening socket on aix (before it had only shutdown() for it); - additional logging and some cleanup in the test; - added handling of LingeredApp hang. --alex