Deadlock with JvmtiTagMap::flush_object_free_events()

XMLWordPrintable

    • Type: Bug
    • Resolution: Fixed
    • Priority: P3
    • 27
    • Affects Version/s: 27
    • Component/s: hotspot
    • b03

      Test: vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t001/TestDescription.java

      The test timed out. The native stack dump showed the following:

      Thread 21 (Thread 0x7fdb39fff640 (LWP 1896391) "JVMTI a..thread"):
      #0 0x00007fdb6588723a in __futex_abstimed_wait_common () from /lib64/libc.so.6
      #1 0x00007fdb65889792 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libc.so.6
      #2 0x00007fdb64e42cdc in PlatformMonitor::wait(unsigned long) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #3 0x00007fdb64de4199 in Monitor::wait_without_safepoint_check(unsigned long) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #4 0x00007fdb64c558fa in JvmtiTagMap::flush_object_free_events() () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #5 0x00007fdb64c26461 in JvmtiEventController::set_user_enabled(JvmtiEnvBase*, JavaThread*, oopDesc*, jvmtiEvent, bool) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #6 0x00007fdb64c0c0f9 in JvmtiEnv::SetEventNotificationMode(jvmtiEventMode, jvmtiEvent, _jobject*, ...) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #7 0x00007fdb64bc371a in jvmti_SetEventNotificationMode () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #8 0x00007fdb656cb808 in _jvmtiEnv::SetEventNotificationMode (this=<optimized out>, mode=JVMTI_DISABLE, event_type=<optimized out>, event_thread=0x0) at support/modules_include/java.base/jvmti.h:2527
      #9 nsk_jvmti_enableEvents (enable=enable@entry=JVMTI_DISABLE, size=size@entry=3, list=list@entry=0x7fdb656d8008 <events>, thread=thread@entry=0x0) at open/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_tools.cpp:569
      #10 0x00007fdb656cbbae in agentProc (jvmti=0x7fdb5c01d870, jni=0x7fdaf800cd48, arg=<optimized out>) at open/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t001/ap04t001.cpp:426
      #11 0x00007fdb656c980c in agentThreadWrapper (jvmti_env=0x7fdb5c01d870, agentJNI=0x7fdaf800cd48, arg=<optimized out>) at open/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_tools.cpp:155
      #12 0x00007fdb64c3d21d in JvmtiAgentThread::start_function_wrapper(JavaThread*, JavaThread*) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #13 0x00007fdb64a019e8 in JavaThread::thread_main_inner() [clone .part.0] () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #14 0x00007fdb6506109f in Thread::call_run() () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #15 0x00007fdb64e365a6 in thread_native_entry(Thread*) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so

      The code for that function has:

      void JvmtiTagMap::flush_object_free_events() {
        assert_not_at_safepoint();
        if (env()->is_enabled(JVMTI_EVENT_OBJECT_FREE)) {
          {
            MonitorLocker ml(lock(), Mutex::_no_safepoint_check_flag);
            // If another thread is posting events, let it finish
            while (_posting_events) {
              ml.wait();
            }

      so we should not have a safepoint active. But the rest of the stack dump shows that the VMThread is bringing the VM to a safepoint. In particular the service thread shows:

      Thread 14 (Thread 0x7fdb6054a640 (LWP 1896384) "Service Thread"):
      #0 0x00007fdb6590767d in syscall () from /lib64/libc.so.6
      #1 0x00007fdb6511c4b3 in LinuxWaitBarrier::wait(int) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #2 0x00007fdb64ef5246 in SafepointSynchronize::block(JavaThread*) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #3 0x00007fdb64ef7298 in SafepointMechanism::process(JavaThread*, bool, bool) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #4 0x00007fdb64c40f9f in JvmtiRawMonitor::raw_enter(Thread*) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #5 0x00007fdb64c15523 in JvmtiEnv::RawMonitorEnter(JvmtiRawMonitor*) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #6 0x00007fdb656c9e03 in _jvmtiEnv::RawMonitorEnter (this=<optimized out>, monitor=<optimized out>) at support/modules_include/java.base/jvmti.h:2490
      #7 increaseCounter (counterPtr=0x7fdb656f2ad8 <eventCount>) at open/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/allocation/AP04/ap04t001/ap04t001.cpp:69
      #8 0x00007fdb64c2d522 in JvmtiExport::post_object_free(JvmtiEnv*, GrowableArray<long>*) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #9 0x00007fdb64c54add in JvmtiTagMap::remove_and_post_dead_objects() () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #10 0x00007fdb64c55925 in JvmtiTagMap::flush_object_free_events() () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #11 0x00007fdb64c559f1 in JvmtiTagMap::flush_all_object_free_events() () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #12 0x00007fdb64f09dc8 in ServiceThread::service_thread_entry(JavaThread*, JavaThread*) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #13 0x00007fdb64a019e8 in JavaThread::thread_main_inner() [clone .part.0] () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #14 0x00007fdb6506109f in Thread::call_run() () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so
      #15 0x00007fdb64e365a6 in thread_native_entry(Thread*) () from /opt/mach5/mesos/work_dir/jib-master/install/jdk-27+3-119/linux-x64.jdk/jdk-27/lib/server/libjvm.so

      So we have a deadlock.

            Assignee:
            Leonid Mesnik
            Reporter:
            David Holmes
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: