chris-miller-klaviyo opened a new issue, #84:
URL: https://github.com/apache/pulsar-client-python/issues/84
This script reproduces the deadlock pretty reliably with python 3.7, and
pulsar-client-3.0 on an x86 Macbook Pro. We originally noticed this in much
more complex producer logic in our CI pipeline on linux, but this minimally
seems to get into the same deadlocked state.
```py
import pulsar
from time import sleep
client = pulsar.Client('pulsar://localhost:6650')
producer =
client.create_producer('persistent://sample/standalone/ns/my-topic')
def send_callback(res, msg):
print(f"Message '{msg}' published res={res}")
for i in range(30):
producer.send_async(f"Hello-{i}".encode('utf-8'), callback=send_callback)
# Sleep to allow sends to complete concurrently before closing the connection
sleep(0.5)
client.close()
```
With an older pulsar version `2.10.2`, this works as expected:
```sh
❯ python deadlock_repro.py
2023-01-24 15:45:26.883 INFO [0x700009c56000] ExecutorService:41 | Run
io_service in a single thread
2023-01-24 15:45:26.883 INFO [0x10f520600] ClientConnection:189 | [<none>
-> pulsar://127.0.0.1:6660] Create ClientConnection, timeout=10000
2023-01-24 15:45:26.883 INFO [0x10f520600] ConnectionPool:96 | Created
connection for pulsar://127.0.0.1:6660
2023-01-24 15:45:26.884 INFO [0x700009c56000] ClientConnection:375 |
[127.0.0.1:50620 -> 127.0.0.1:6660] Connected to broker
2023-01-24 15:45:26.887 INFO [0x700009d5c000] ExecutorService:41 | Run
io_service in a single thread
2023-01-24 15:45:26.887 INFO [0x700009c56000] HandlerBase:61 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-0,
] Getting connection from pool
2023-01-24 15:45:26.887 INFO [0x700009c56000] HandlerBase:61 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-1,
] Getting connection from pool
2023-01-24 15:45:26.887 INFO [0x700009c56000] HandlerBase:61 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-2,
] Getting connection from pool
2023-01-24 15:45:26.887 INFO [0x700009c56000] HandlerBase:61 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-3,
] Getting connection from pool
2023-01-24 15:45:26.888 INFO [0x700009c56000] ClientConnection:189 |
[<none> -> pulsar://127.0.0.1:6660] Create ClientConnection, timeout=10000
2023-01-24 15:45:26.888 INFO [0x700009c56000] ConnectionPool:96 | Created
connection for pulsar://localhost:6650
2023-01-24 15:45:26.889 INFO [0x700009c56000] ClientConnection:377 |
[127.0.0.1:50621 -> 127.0.0.1:6660] Connected to broker through proxy. Logical
broker: pulsar://localhost:6650
2023-01-24 15:45:26.892 INFO [0x700009c56000] ProducerImpl:174 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-0,
] Created producer on broker [127.0.0.1:50621 -> 127.0.0.1:6660]
2023-01-24 15:45:26.892 INFO [0x700009c56000] ProducerImpl:174 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-1,
] Created producer on broker [127.0.0.1:50621 -> 127.0.0.1:6660]
2023-01-24 15:45:26.892 INFO [0x700009c56000] ProducerImpl:174 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-2,
] Created producer on broker [127.0.0.1:50621 -> 127.0.0.1:6660]
2023-01-24 15:45:26.893 INFO [0x700009c56000] ProducerImpl:174 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-3,
] Created producer on broker [127.0.0.1:50621 -> 127.0.0.1:6660]
Message '(1160,53,1,-1)' published res=Ok
Message '(1160,54,1,-1)' published res=Ok
Message '(1160,55,1,-1)' published res=Ok
Message '(1160,56,1,-1)' published res=Ok
Message '(1160,57,1,-1)' published res=Ok
Message '(1160,58,1,-1)' published res=Ok
Message '(1160,59,1,-1)' published res=Ok
Message '(1160,60,1,-1)' published res=Ok
Message '(1159,56,3,-1)' published res=Ok
Message '(1159,57,3,-1)' published res=Ok
Message '(1159,58,3,-1)' published res=Ok
Message '(1159,59,3,-1)' published res=Ok
Message '(1158,58,0,-1)' published res=Ok
Message '(1158,59,0,-1)' published res=Ok
Message '(1158,60,0,-1)' published res=Ok
Message '(1158,61,0,-1)' published res=Ok
Message '(1158,62,0,-1)' published res=Ok
Message '(1158,63,0,-1)' published res=Ok
Message '(1158,64,0,-1)' published res=Ok
Message '(1158,65,0,-1)' published res=Ok
Message '(1161,53,2,-1)' published res=Ok
Message '(1161,54,2,-1)' published res=Ok
Message '(1161,55,2,-1)' published res=Ok
Message '(1161,56,2,-1)' published res=Ok
Message '(1159,60,3,-1)' published res=Ok
Message '(1161,57,2,-1)' published res=Ok
Message '(1161,58,2,-1)' published res=Ok
Message '(1161,59,2,-1)' published res=Ok
Message '(1159,61,3,-1)' published res=Ok
Message '(1159,62,3,-1)' published res=Ok
2023-01-24 15:45:27.398 INFO [0x10f520600] ClientImpl:505 | Closing Pulsar
client with 1 producers and 0 consumers
2023-01-24 15:45:27.398 INFO [0x10f520600] ProducerImpl:651 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-0,
standalone-0-80] Closing producer for topic
persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-0
2023-01-24 15:45:27.398 INFO [0x10f520600] ProducerImpl:651 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-1,
standalone-0-81] Closing producer for topic
persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-1
2023-01-24 15:45:27.398 INFO [0x10f520600] ProducerImpl:651 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-2,
standalone-0-82] Closing producer for topic
persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-2
2023-01-24 15:45:27.398 INFO [0x10f520600] ProducerImpl:651 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-3,
standalone-0-83] Closing producer for topic
persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-3
2023-01-24 15:45:27.400 INFO [0x700009c56000] ProducerImpl:691 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-0,
standalone-0-80] Closed producer
2023-01-24 15:45:27.400 INFO [0x700009c56000] ProducerImpl:691 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-1,
standalone-0-81] Closed producer
2023-01-24 15:45:27.400 INFO [0x700009c56000] ProducerImpl:691 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-2,
standalone-0-82] Closed producer
2023-01-24 15:45:27.401 INFO [0x700009c56000] ProducerImpl:691 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-3,
standalone-0-83] Closed producer
2023-01-24 15:45:27.401 INFO [0x700009ddf000] ClientConnection:1563 |
[127.0.0.1:50620 -> 127.0.0.1:6660] Connection closed
2023-01-24 15:45:27.401 INFO [0x700009ddf000] ClientConnection:263 |
[127.0.0.1:50620 -> 127.0.0.1:6660] Destroyed connection
2023-01-24 15:45:27.401 INFO [0x700009ddf000] ClientConnection:1563 |
[127.0.0.1:50621 -> 127.0.0.1:6660] Connection closed
2023-01-24 15:45:27.401 INFO [0x700009c56000] ExecutorService:47 | Event
loop of ExecutorService exits successfully
2023-01-24 15:45:27.401 INFO [0x700009d5c000] ExecutorService:47 | Event
loop of ExecutorService exits successfully
```
However, if I upgrade to `pulsar-3.0`, that script gets deadlocked, and does
not respond to SIGINT:
```
❯ python deadlock_repro.py
2023-01-24 15:41:21.192 INFO [0x10db56600] ClientConnection:189 | [<none>
-> pulsar://127.0.0.1:6660] Create ClientConnection, timeout=10000
2023-01-24 15:41:21.192 INFO [0x10db56600] ConnectionPool:97 | Created
connection for pulsar://127.0.0.1:6660
2023-01-24 15:41:21.194 INFO [0x7000048cd000] ClientConnection:379 |
[127.0.0.1:50470 -> 127.0.0.1:6660] Connected to broker
2023-01-24 15:41:21.208 INFO [0x7000048cd000] HandlerBase:72 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-0,
] Getting connection from pool
2023-01-24 15:41:21.208 INFO [0x7000048cd000] HandlerBase:72 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-1,
] Getting connection from pool
2023-01-24 15:41:21.208 INFO [0x7000048cd000] HandlerBase:72 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-2,
] Getting connection from pool
2023-01-24 15:41:21.209 INFO [0x7000048cd000] HandlerBase:72 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-3,
] Getting connection from pool
2023-01-24 15:41:21.210 INFO [0x7000048cd000] ClientConnection:189 |
[<none> -> pulsar://127.0.0.1:6660] Create ClientConnection, timeout=10000
2023-01-24 15:41:21.210 INFO [0x7000048cd000] ConnectionPool:97 | Created
connection for pulsar://localhost:6650
2023-01-24 15:41:21.211 INFO [0x7000048cd000] ClientConnection:381 |
[127.0.0.1:50471 -> 127.0.0.1:6660] Connected to broker through proxy. Logical
broker: pulsar://localhost:6650
2023-01-24 15:41:21.217 INFO [0x7000048cd000] ProducerImpl:190 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-3,
] Created producer on broker [127.0.0.1:50471 -> 127.0.0.1:6660]
2023-01-24 15:41:21.217 INFO [0x7000048cd000] ProducerImpl:190 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-0,
] Created producer on broker [127.0.0.1:50471 -> 127.0.0.1:6660]
2023-01-24 15:41:21.217 INFO [0x7000048cd000] ProducerImpl:190 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-1,
] Created producer on broker [127.0.0.1:50471 -> 127.0.0.1:6660]
2023-01-24 15:41:21.217 INFO [0x7000048cd000] ProducerImpl:190 |
[persistent://chariot1/chariot_ns_sre--heartbeat/chariot_topic_heartbeat-partition-2,
] Created producer on broker [127.0.0.1:50471 -> 127.0.0.1:6660]
```
We have observed this on x86 Mac laptops, and on linux (in our CI system,
testing a much more complex producer than in the script above).
`lldb` on mac shows the following thread dump of the deadlocked process:
```
(lldb) thread list
Process 81000 stopped
* thread #1: tid = 0x167b444, 0x00007ff80a193bd2
libsystem_kernel.dylib`__psynch_mutexwait + 10, queue =
'com.apple.main-thread', stop reason = signal SIGSTOP
thread #2: tid = 0x167b445, 0x00007ff80a1943ea
libsystem_kernel.dylib`__psynch_cvwait + 10
thread #3: tid = 0x167b446, 0x00007ff80a1943ea
libsystem_kernel.dylib`__psynch_cvwait + 10
thread #4: tid = 0x167b447, 0x00007ff80a19634e
libsystem_kernel.dylib`kevent + 10
(lldb)
(lldb) bt all
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
* frame #0: 0x00007ff80a193bd2 libsystem_kernel.dylib`__psynch_mutexwait +
10
frame #1: 0x00007ff80a1cbe7e
libsystem_pthread.dylib`_pthread_mutex_firstfit_lock_wait + 76
frame #2: 0x00007ff80a1c9cbb
libsystem_pthread.dylib`_pthread_mutex_firstfit_lock_slow + 205
frame #3: 0x00007ff80a12e739 libc++.1.dylib`std::__1::mutex::lock() + 9
frame #4: 0x00000001087b7c25
_pulsar.cpython-37m-darwin.so`pulsar::ClientConnection::sendMessage(pulsar::OpSendMsg
const&) + 53
frame #5: 0x00000001088d411a
_pulsar.cpython-37m-darwin.so`pulsar::ProducerImpl::sendMessage(pulsar::OpSendMsg
const&) + 298
frame #6: 0x00000001088d2916
_pulsar.cpython-37m-darwin.so`pulsar::ProducerImpl::sendAsyncWithStatsUpdate(pulsar::Message
const&, std::__1::function<void (pulsar::Result, pulsar::MessageId const&)>
const&) + 3526
frame #7: 0x00000001088d19bc
_pulsar.cpython-37m-darwin.so`pulsar::ProducerImpl::sendAsync(pulsar::Message
const&, std::__1::function<void (pulsar::Result, pulsar::MessageId const&)>) +
364
frame #8: 0x00000001088b9a82
_pulsar.cpython-37m-darwin.so`pulsar::PartitionedProducerImpl::sendAsync(pulsar::Message
const&, std::__1::function<void (pulsar::Result, pulsar::MessageId const&)>) +
914
frame #9: 0x00000001088c8eb5
_pulsar.cpython-37m-darwin.so`pulsar::Producer::sendAsync(pulsar::Message
const&, std::__1::function<void (pulsar::Result, pulsar::MessageId const&)>) +
149
frame #10: 0x0000000108771ac4 _pulsar.cpython-37m-darwin.so`void
pybind11::detail::argument_loader<pulsar::Producer*, pulsar::Message const&,
std::__1::function<void (pulsar::Result, pulsar::MessageId const&)>
>::call_impl<void, pybind11::cpp_function::cpp_function<void, pulsar::Producer,
pulsar::Message const&, std::__1::function<void (pulsar::Result,
pulsar::MessageId const&)>, pybind11::name, pybind11::is_method,
pybind11::sibling>(void (pulsar::Producer::*)(pulsar::Message const&,
std::__1::function<void (pulsar::Result, pulsar::MessageId const&)>),
pybind11::name const&, pybind11::is_method const&, pybind11::sibling
const&)::'lambda'(pulsar::Producer*, pulsar::Message const&,
std::__1::function<void (pulsar::Result, pulsar::MessageId const&)>)&, 0ul,
1ul, 2ul, pybind11::detail::void_type>(pulsar::Producer&&,
pybind11::detail::index_sequence<0ul, 1ul, 2ul>, pybind11::detail::void_type&&)
&& + 212
frame #11: 0x0000000108770f2f _pulsar.cpython-37m-darwin.so`void
pybind11::cpp_function::initialize<pybind11::cpp_function::cpp_function<void,
pulsar::Producer, pulsar::Message const&, std::__1::function<void
(pulsar::Result, pulsar::MessageId const&)>, pybind11::name,
pybind11::is_method, pybind11::sibling>(void
(pulsar::Producer::*)(pulsar::Message const&, std::__1::function<void
(pulsar::Result, pulsar::MessageId const&)>), pybind11::name const&,
pybind11::is_method const&, pybind11::sibling
const&)::'lambda'(pulsar::Producer*, pulsar::Message const&,
std::__1::function<void (pulsar::Result, pulsar::MessageId const&)>), void,
pulsar::Producer*, pulsar::Message const&, std::__1::function<void
(pulsar::Result, pulsar::MessageId const&)>, pybind11::name,
pybind11::is_method, pybind11::sibling>(void&&, pulsar::Producer
(*)(pulsar::Message const&, std::__1::function<void (pulsar::Result,
pulsar::MessageId const&)>), pybind11::name const&, pybind11::is_method const&,
pybind11::si
bling
const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&)
const + 255
frame #12: 0x000000010871420d
_pulsar.cpython-37m-darwin.so`pybind11::cpp_function::dispatcher(_object*,
_object*, _object*) + 4733
frame #13: 0x000000010597218a python3.7`_PyMethodDef_RawFastCallKeywords
+ 714
frame #14: 0x00000001059711ac python3.7`_PyObject_FastCallKeywords + 332
frame #15: 0x0000000105a47ca5 python3.7`call_function + 773
frame #16: 0x0000000105a44428 python3.7`_PyEval_EvalFrameDefault + 28344
frame #17: 0x0000000105a489a8 python3.7`_PyEval_EvalCodeWithName + 2888
frame #18: 0x0000000105971444 python3.7`_PyFunction_FastCallKeywords +
228
frame #19: 0x0000000105a47cac python3.7`call_function + 780
frame #20: 0x0000000105a44574 python3.7`_PyEval_EvalFrameDefault + 28676
frame #21: 0x0000000105a489a8 python3.7`_PyEval_EvalCodeWithName + 2888
frame #22: 0x0000000105a3d4d0 python3.7`PyEval_EvalCode + 48
frame #23: 0x0000000105a801de python3.7`PyRun_FileExFlags + 174
frame #24: 0x0000000105a7f77e python3.7`PyRun_SimpleFileExFlags + 270
frame #25: 0x0000000105aa165e python3.7`pymain_main + 6622
frame #26: 0x0000000105aa202f python3.7`_Py_UnixMain + 111
frame #27: 0x000000010dadb52e dyld`start + 462
thread #2
frame #0: 0x00007ff80a1943ea libsystem_kernel.dylib`__psynch_cvwait + 10
frame #1: 0x00007ff80a1cea6f libsystem_pthread.dylib`_pthread_cond_wait
+ 1249
frame #2: 0x0000000105a3cb9f python3.7`take_gil + 255
frame #3: 0x0000000105a3cfb3 python3.7`PyEval_AcquireThread + 19
frame #4: 0x000000010870be43
_pulsar.cpython-37m-darwin.so`pybind11::gil_scoped_acquire::gil_scoped_acquire()
+ 83
frame #5: 0x00000001087714f3
_pulsar.cpython-37m-darwin.so`pybind11::detail::type_caster<std::__1::function<void
(pulsar::Result, pulsar::MessageId const&)>, void>::load(pybind11::handle,
bool)::func_handle::func_handle(func_handle const&) + 35
frame #6: 0x00000001087715f1
_pulsar.cpython-37m-darwin.so`std::__1::__function::__func<pybind11::detail::type_caster<std::__1::function<void
(pulsar::Result, pulsar::MessageId const&)>, void>::load(pybind11::handle,
bool)::func_wrapper,
std::__1::allocator<pybind11::detail::type_caster<std::__1::function<void
(pulsar::Result, pulsar::MessageId const&)>, void>::load(pybind11::handle,
bool)::func_wrapper>, void (pulsar::Result, pulsar::MessageId
const&)>::__clone() const + 49
frame #7: 0x00000001088daccd
_pulsar.cpython-37m-darwin.so`std::__1::__function::__func<pulsar::ProducerImpl::sendAsync(pulsar::Message
const&, std::__1::function<void (pulsar::Result, pulsar::MessageId
const&)>)::$_2,
std::__1::allocator<pulsar::ProducerImpl::sendAsync(pulsar::Message const&,
std::__1::function<void (pulsar::Result, pulsar::MessageId const&)>)::$_2>,
void (pulsar::Result, pulsar::MessageId const&)>::__clone() const + 93
frame #8: 0x000000010878f7de
_pulsar.cpython-37m-darwin.so`pulsar::OpSendMsg::OpSendMsg(pulsar::OpSendMsg
const&) + 126
frame #9: 0x00000001087f0f85
_pulsar.cpython-37m-darwin.so`boost::any::holder<pulsar::OpSendMsg>::clone()
const + 53
frame #10: 0x00000001087b864a
_pulsar.cpython-37m-darwin.so`pulsar::ClientConnection::sendPendingCommands() +
106
frame #11: 0x00000001087f6812
_pulsar.cpython-37m-darwin.so`boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,
boost::asio::any_io_executor>, pulsar::CompositeSharedBuffer<2>,
boost::asio::const_buffer const*, boost::asio::detail::transfer_all_t,
AllocHandler<std::__1::__bind<void
(pulsar::ClientConnection::*)(boost::system::error_code const&),
std::__1::shared_ptr<pulsar::ClientConnection>, std::__1::placeholders::__ph<1>
const&> > >::operator()(boost::system::error_code, unsigned long, int) + 434
frame #12: 0x00000001087f6b60
_pulsar.cpython-37m-darwin.so`boost::asio::detail::reactive_socket_send_op<boost::asio::detail::prepared_buffers<boost::asio::const_buffer,
64ul>,
boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp,
boost::asio::any_io_executor>, pulsar::CompositeSharedBuffer<2>,
boost::asio::const_buffer const*, boost::asio::detail::transfer_all_t,
AllocHandler<std::__1::__bind<void
(pulsar::ClientConnection::*)(boost::system::error_code const&),
std::__1::shared_ptr<pulsar::ClientConnection>, std::__1::placeholders::__ph<1>
const&> > >, boost::asio::any_io_executor>::do_complete(void*,
boost::asio::detail::scheduler_operation*, boost::system::error_code const&,
unsigned long) + 320
frame #13: 0x00000001087c0946
_pulsar.cpython-37m-darwin.so`boost::asio::detail::scheduler::do_run_one(boost::asio::detail::conditionally_enabled_mutex::scoped_lock&,
boost::asio::detail::scheduler_thread_info&, boost::system::error_code const&)
+ 694
frame #14: 0x00000001087c0481
_pulsar.cpython-37m-darwin.so`boost::asio::detail::scheduler::run(boost::system::error_code&)
+ 321
frame #15: 0x0000000108866ca7 _pulsar.cpython-37m-darwin.so`void*
std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct,
std::__1::default_delete<std::__1::__thread_struct> >,
pulsar::ExecutorService::start()::$_0> >(void*) + 119
frame #16: 0x00007ff80a1ce4e1 libsystem_pthread.dylib`_pthread_start +
125
frame #17: 0x00007ff80a1c9f6b libsystem_pthread.dylib`thread_start + 15
thread #3
frame #0: 0x00007ff80a1943ea libsystem_kernel.dylib`__psynch_cvwait + 10
frame #1: 0x00007ff80a1cea6f libsystem_pthread.dylib`_pthread_cond_wait
+ 1249
frame #2: 0x00000001087c0873
_pulsar.cpython-37m-darwin.so`boost::asio::detail::scheduler::do_run_one(boost::asio::detail::conditionally_enabled_mutex::scoped_lock&,
boost::asio::detail::scheduler_thread_info&, boost::system::error_code const&)
+ 483
frame #3: 0x00000001087c0481
_pulsar.cpython-37m-darwin.so`boost::asio::detail::scheduler::run(boost::system::error_code&)
+ 321
frame #4: 0x00000001087c0334
_pulsar.cpython-37m-darwin.so`boost::asio::detail::posix_thread::func<boost::asio::detail::resolver_service_base::work_scheduler_runner>::run()
+ 36
frame #5: 0x00000001087c02e0
_pulsar.cpython-37m-darwin.so`boost_asio_detail_posix_thread_function + 16
frame #6: 0x00007ff80a1ce4e1 libsystem_pthread.dylib`_pthread_start + 125
frame #7: 0x00007ff80a1c9f6b libsystem_pthread.dylib`thread_start + 15
thread #4
frame #0: 0x00007ff80a19634e libsystem_kernel.dylib`kevent + 10
frame #1: 0x00000001087bf587
_pulsar.cpython-37m-darwin.so`boost::asio::detail::kqueue_reactor::run(long,
boost::asio::detail::op_queue<boost::asio::detail::scheduler_operation>&) + 327
frame #2: 0x00000001087c07b4
_pulsar.cpython-37m-darwin.so`boost::asio::detail::scheduler::do_run_one(boost::asio::detail::conditionally_enabled_mutex::scoped_lock&,
boost::asio::detail::scheduler_thread_info&, boost::system::error_code const&)
+ 292
frame #3: 0x00000001087c0481
_pulsar.cpython-37m-darwin.so`boost::asio::detail::scheduler::run(boost::system::error_code&)
+ 321
frame #4: 0x0000000108866ca7 _pulsar.cpython-37m-darwin.so`void*
std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct,
std::__1::default_delete<std::__1::__thread_struct> >,
pulsar::ExecutorService::start()::$_0> >(void*) + 119
frame #5: 0x00007ff80a1ce4e1 libsystem_pthread.dylib`_pthread_start + 125
frame #6: 0x00007ff80a1c9f6b libsystem_pthread.dylib`thread_start + 15
```
I'm not really a pybind/boost expert, but it looks to me like maybe PyBind11
is trying to acquire the GIL in a way that ends up causing deadlocks that
didn't occur before PyBind11 was introduced.
Do you have a sense of what that deadlock may be caused by, and how to fix
it?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]