On Wed, 29 Mar 2023 22:02:02 GMT, Daniel D. Daugherty <dcu...@openjdk.org> 
wrote:

>> src/hotspot/share/runtime/threads.cpp line 1423:
>> 
>>> 1421: 
>>> 1422: JavaThread* Threads::owning_thread_from_object(ThreadsList * t_list, 
>>> oop obj) {
>>> 1423:   assert(SafepointSynchronize::is_at_safepoint(), "not safe outside 
>>> of safepoint");
>> 
>> `ObjectSynchronizer::get_lock_owner()` calls 
>> `Threads::owning_thread_from_object()`
>> and I don't think you can assert that `ObjectSynchronizer::get_lock_owner()` 
>>  is only
>> called from a safepoint. In particular, `ThreadSnapshot::initialize()` calls
>> `ObjectSynchronizer::get_lock_owner()`  and I believe that `initialize()` 
>> function can
>> be called from non-safepoint places with M&M APIs...
>
> Update: In v35 you put back the `!UseFastLocking` check in 
> `jmm_GetThreadInfo()`
> so now the `assert()` won't fire, but you've again changed the behavior of 
> that API
> and now it will be able to observe fewer thread state changes than it did 
> before.

Please explain why you think this is "not safe". Yes, you can observe state 
that is in
the process of changing, but do you think that we'll see a crash with allowing
`Threads::owning_thread_from_object()` to be called from a non-safepoint place?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/10907#discussion_r1152536799

Reply via email to