Unexpected behaviour is too common phrase - got it

As i sad i’ve experienced it in 
https://github.com/spring-projects/spring-framework/blob/main/spring-aop/src/main/java/org/springframework/aop/interceptor/ExposeInvocationInterceptor.java

Error on ThreadLocal#set in finally section there lead to leaving wrong state 
of TL (in my case it was non-null value into TL, that Spring’s AOP treats like 
“part of recursion calls” and AOP will return null insteadof expected value 
(for all execution in such “poisoned” thread)

I believe that the same situation is possible with ThreadLocal#remove too


> 29 сент. 2023 г., в 05:37, David Holmes <david.hol...@oracle.com> написал(а):
> 
> On 29/09/2023 6:33 am, Егор Зиборов wrote:
>> Hello, Alan
>> I’ve experienced SO in ThreadLocal#set on my production instance
>> (more than that it‘s happened in Spring’s ExposeInvocationInterceptor
>> that uses TL as context storage)As a result of SO in ThreadLocal
>> we’ve experienced unexpected errors with Spring AOP, but I’m sure
>> that it could affects lots of frameworks
> SOE will nearly always lead to unexpected errors, so that in itself is not 
> sufficient justification for trying to apply ReservedStackAccess. We added 
> RSA to address an insidious situation where SOE would leave ReentrantLocks in 
> a broken state - and we wanted ReentrantLock to be as reliable as built-in 
> monitor locks (or as near as feasible). So you need a very strong case to 
> apply RSA elsewhere. You also need to be sure that the stack needed from the 
> annotated method is small enough for the RSA mechanism to protect. Also note 
> that RSA doesn't prevent SOE it simply defers it out of the critical code 
> protected by SOE, so the problem is simply pushed to the caller.
> 
> Just my 2c.
> 
> David
> 
>>> 
>>>> 28 сент. 2023 г., в 19:55, Alan Bateman <alan.bate...@oracle.com> 
>>>> написал(а):
>>> 
>>> On 28/09/2023 17:21, Егор Зиборов wrote:
>>>> Hello, everyone
>>>> 
>>>> I'm new there and writing this letter during advice of Dalibor Topic
>>>> 
>>>> I faced an issue with SOE in ThreadLocal and want to add this java9 
>>>> annotation on ThreadLocal#set. Does anyone have any concerns about it?
>>>> 
>>> This annotation is for very core/critical areas that are particularly 
>>> sensitive to SO. Did the SO that you observe just happen to be in 
>>> ThreadLocal.set or is there more to this story? Asking because there are 
>>> dozens places in java.base where the argument could be made but we have to 
>>> be very careful to not sprinkle it about.
>>> 
>>> -Alab
>>> 

Reply via email to