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

Reply via email to