]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr: don't dump global config holding gil
authorMykola Golub <mgolub@suse.com>
Fri, 16 Dec 2022 16:14:29 +0000 (16:14 +0000)
committerMykola Golub <mgolub@suse.com>
Fri, 16 Dec 2022 16:14:29 +0000 (16:14 +0000)
When dumping the config the cpython may drop/take the gil which
may lead to a deadlock when another cpython thread is trying to
get the config lock while holding the gil.

Fixes: https://tracker.ceph.com/issues/58269
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/mgr/ActivePyModules.cc

index 5fe5ceeb9b43b94dcfd4ace16b9bbb91b5f4ba72..25712bf957bcfe94e661110ce96073eb71224f92 100644 (file)
@@ -259,10 +259,16 @@ PyObject *ActivePyModules::get_python(const std::string &what)
     }
     f.close_section();
   } else if (what.substr(0, 6) == "config") {
+    // We make a copy of the global config to avoid printing
+    // to py formater (which may drop-take GIL) while holding
+    // the global config lock, which might deadlock with other
+    // thread that is holding the GIL and acquiring the global
+    // config lock.
+    ConfigProxy config{g_conf()};
     if (what == "config_options") {
-      g_conf().config_options(&f);
+      config.config_options(&f);
     } else if (what == "config") {
-      g_conf().show_config(&f);
+      config.show_config(&f);
     }
   } else if (what == "mon_map") {
     without_gil_t no_gil;