Project

General

Profile

Bug #21157

Updated by John Spray over 6 years ago

I think this got broken when use of sub-interpreters was added.    MonCommandCompletion used to use PyGILState_Ensure, which would create thread state if needed, but then switched to Gil(), which expects you to explicitly specify whether you're possibly calling from a non-initialized thread (such as the MonClient Finisher, where we get our moncommand completions). 

 <pre> 

  ceph version 12.1.1-1977-gfae184f (fae184fe001d8b655b4ca1914871c6e62a5e1430) mimic (dev) 
  1: (ceph::BackTrace::BackTrace(int)+0x45) [0x557d448371eb] 
  2: (()+0x15d71f9) [0x557d448361f9] 
  3: (()+0x11390) [0x7fc0e2fd0390] 
  4: (PyDict_SetItem()+0x20) [0x7fc0e415be70] 
  5: (PyEval_EvalFrameEx()+0x326e) [0x7fc0e40b3f6e] 
  6: (PyEval_EvalFrameEx()+0x7124) [0x7fc0e40b7e24] 
  7: (PyEval_EvalCodeEx()+0x85c) [0x7fc0e41e201c] 
  8: (PyEval_EvalFrameEx()+0x6ffd) [0x7fc0e40b7cfd] 
  9: (PyEval_EvalFrameEx()+0x7124) [0x7fc0e40b7e24] 
  10: (PyEval_EvalFrameEx()+0x7124) [0x7fc0e40b7e24] 
  11: (PyEval_EvalCodeEx()+0x85c) [0x7fc0e41e201c] 
  12: (()+0x13e2e0) [0x7fc0e41382e0] 
  13: (PyObject_Call()+0x43) [0x7fc0e410b1e3] 
  14: (()+0x18531c) [0x7fc0e417f31c] 
  15: (PyObject_Call()+0x43) [0x7fc0e410b1e3] 
  16: (PyEval_CallObjectWithKeywords()+0x47) [0x7fc0e41e1447] 
  17: (MonCommandCompletion::finish(int)+0x4bc) [0x557d446802b4] 
  18: (Context::complete(int)+0x27) [0x557d44621205] 
  19: (Finisher::finisher_thread_entry()+0x426) [0x557d44890e32] 
  20: (Finisher::FinisherThread::entry()+0x1c) [0x557d446a9000] 
  21: (Thread::entry_wrapper()+0xc1) [0x557d44b41b69] 
  22: (Thread::_entry_func(void*)+0x18) [0x557d44b41a9e] 
  23: (()+0x76ba) [0x7fc0e2fc66ba] 
  24: (clone()+0x6d) [0x7fc0e20323dd] 
 </pre>

Back