[ 
https://issues.apache.org/jira/browse/GEODE-9471?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Darrel Schneider updated GEODE-9471:
------------------------------------
    Labels: Java16  (was: )

> gfsh show dead-locks will fail on java 16 and later
> ---------------------------------------------------
>
>                 Key: GEODE-9471
>                 URL: https://issues.apache.org/jira/browse/GEODE-9471
>             Project: Geode
>          Issue Type: Bug
>          Components: core
>            Reporter: Darrel Schneider
>            Priority: Major
>              Labels: Java16
>
> The gfsh show dead-locks command ends up depending on this class: 
> org.apache.geode.distributed.internal.deadlock.UnsafeThreadLocal
> Most of the time this UnsafeThreadLocal just behaves like a normal jdk 
> ThreadLocal (its super class). But when the gfsh command is executed it 
> causes "get" to be called on UnsafeThreadLocal. It uses a bunch of reflection 
> to prevent "get" from setting an initial value in the case of a miss. This 
> reflection calls setAccessible which will cause get to fail on java 16 and 
> later (see: 
> https://softwaregarden.dev/en/posts/new-java/illegal-access-in-java-16).
> To workaround this failure set the JVM command line option: 
> --illegal-access=permit
> The current solution iterates all the threads in the jvm checking which are 
> in the thread local by doing a get. This would cause the thread local to end 
> up containing all threads. What we could do on these scans (they only happen 
> when gfsh show dead-locks is executed) is if the get misses for a thread we 
> could turn around and call ThreadLocal.remove. A bit more expensive than the 
> current solution but it would be safe and work on java 16.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to