zeromq / libzmq

ZeroMQ core engine in C++, implements ZMTP/3.1
https://www.zeromq.org
Mozilla Public License 2.0
9.51k stars 2.34k forks source link

Assertion failed: _input_stopped (stream_engine.cpp:467) #3937

Open lukaszsamson opened 4 years ago

lukaszsamson commented 4 years ago

Issue description

Assertion failed: _input_stopped (stream_engine.cpp:467)

Environment

Minimal test code / Steps to reproduce the issue

Issue happens indeterministically so no direct reproduction steps. I have a process with several threads each running one dedicated DEALER socket. Every socket is in the same zmq context and is connected to the same endpoint (ROUTER) over TCP transport and uses asynchronous request-response pattern. The socket threads each call zmq_poll (on that one socket) and alternate zm_send/zmq_recv with ZMQ_DONTWAIT. The endpoint is generally slow at consuming messages and sending responses and the responses may be produced in a different order or not arrive at all. Sockets are created and used only on 1 thread.

What's the actual result? (include assertion message & call stack if applicable)

Creshing thread stack trace

* thread #35, name = 'ZMQbg/IO/0', stop reason = signal SIGABRT
  * frame #0: 0x00007fff7331f33a libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007fff733dbe60 libsystem_pthread.dylib`pthread_kill + 430
    frame #2: 0x00007fff732a6808 libsystem_c.dylib`abort + 120
    frame #3: 0x000000001f9236e9 libzmq.5.dylib`zmq::zmq_abort(char const*) + 9
    frame #4: 0x000000001f953f0b libzmq.5.dylib`zmq::stream_engine_t::restart_input() + 651
    frame #5: 0x000000001f9426b8 libzmq.5.dylib`non-virtual thunk to zmq::session_base_t::write_activated(zmq::pipe_t*) + 136
    frame #6: 0x000000001f924afc libzmq.5.dylib`zmq::io_thread_t::in_event() + 60
    frame #7: 0x000000001f928658 libzmq.5.dylib`zmq::kqueue_t::loop() + 408
    frame #8: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #9: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #10: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15

All threads

  thread #1, queue = 'com.apple.main-thread'
    frame #0: 0x00007fff3b0a76d9 CoreText`TASCIIDataCache::GetDataForMapIndex(unsigned short) const + 61
    frame #1: 0x00007fff3b0a7630 CoreText`TASCIIDataCache::GetDataForChar(unsigned short) const + 80
    frame #2: 0x00007fff3b0a7352 CoreText`TASCIIEncoder::Encode() + 242
    frame #3: 0x00007fff3b0a6cf7 CoreText`TGlyphEncoder::EncodeChars(CFRange, TAttributes const&, TGlyphEncoder::Fallbacks) + 1023
    frame #4: 0x00007fff3b0a63e1 CoreText`TTypesetterAttrString::Initialize(__CFAttributedString const*) + 291
    frame #5: 0x00007fff3b0a60fd CoreText`TTypesetterAttrString::TTypesetterAttrString(__CFAttributedString const*, __CFDictionary const*) + 163
    frame #6: 0x00007fff3b0a5f83 CoreText`CTLineCreateWithAttributedString + 85
    frame #7: 0x000000007735b539 libwx_osx_cocoau_core-3.1.dylib`wxMacCoreGraphicsContext::DoDrawText(wxString const&, double, double) + 555
    frame #8: 0x0000000071882c81 wxe_driver.so`WxeApp::wxe_dispatch(wxeCommand&) + 4945
    frame #9: 0x000000007193b48d wxe_driver.so`WxeApp::dispatch_cb(wxeFifo*, unsigned long) + 301
    frame #10: 0x000000007193b32d wxe_driver.so`handle_event_callback(_erl_drv_port*, unsigned long) + 93
    frame #11: 0x0000000071934361 wxe_driver.so`sendevent(wxEvent*, unsigned long) + 7137
    frame #12: 0x00000000723c0532 libwx_baseu-3.1.dylib`wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) + 88
    frame #13: 0x00000000723c17c0 libwx_baseu-3.1.dylib`wxEvtHandler::SearchDynamicEventTable(wxEvent&) + 128
    frame #14: 0x00000000723c16ea libwx_baseu-3.1.dylib`wxEvtHandler::TryHereOnly(wxEvent&) + 40
    frame #15: 0x00000000723c163a libwx_baseu-3.1.dylib`wxEvtHandler::ProcessEventLocally(wxEvent&) + 34
    frame #16: 0x00000000723c156c libwx_baseu-3.1.dylib`wxEvtHandler::ProcessEvent(wxEvent&) + 80
    frame #17: 0x00000000723c190a libwx_baseu-3.1.dylib`wxEvtHandler::SafelyProcessEvent(wxEvent&) + 12
    frame #18: 0x000000007731fe29 libwx_osx_cocoau_core-3.1.dylib`wxWindow::MacDoRedraw(long) + 643
    frame #19: 0x00000000773c4882 libwx_osx_cocoau_core-3.1.dylib`wxWidgetCocoaImpl::drawRect(void*, NSView*, void*) + 694
    frame #20: 0x00000000773c1d06 libwx_osx_cocoau_core-3.1.dylib`wxOSX_drawRect(NSView*, objc_selector*, CGRect) + 86
    frame #21: 0x00007fff366991ff AppKit`_NSViewDrawRect + 139
    frame #22: 0x00007fff3669850e AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inContext:stopAtLayerBackedViews:] + 2170
    frame #23: 0x00007fff3669889f AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inContext:stopAtLayerBackedViews:] + 3083
    frame #24: 0x00007fff3669889f AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inContext:stopAtLayerBackedViews:] + 3083
    frame #25: 0x00007fff3669889f AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inContext:stopAtLayerBackedViews:] + 3083
    frame #26: 0x00007fff3669889f AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inContext:stopAtLayerBackedViews:] + 3083
    frame #27: 0x00007fff3669790a AppKit`-[NSView(NSLayerKitGlue) _drawViewBackingLayer:inContext:drawingHandler:] + 1271
    frame #28: 0x00007fff44d72edd QuartzCore`CABackingStoreUpdate_ + 595
    frame #29: 0x00007fff44dd2935 QuartzCore`___ZN2CA5Layer8display_Ev_block_invoke + 53
    frame #30: 0x00007fff44d723ce QuartzCore`-[CALayer _display] + 2103
    frame #31: 0x00007fff366972fa AppKit`-[_NSBackingLayer display] + 537
    frame #32: 0x00007fff365f8de7 AppKit`-[_NSViewBackingLayer display] + 800
    frame #33: 0x00007fff44d71469 QuartzCore`CA::Layer::display_if_needed(CA::Transaction*) + 757
    frame #34: 0x00007fff44d4f716 QuartzCore`CA::Context::commit_transaction(CA::Transaction*, double) + 334
    frame #35: 0x00007fff44d4e304 QuartzCore`CA::Transaction::commit() + 644
    frame #36: 0x00007fff366ada01 AppKit`__62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke + 266
    frame #37: 0x00007fff36dcc950 AppKit`___NSRunLoopObserverCreateWithHandler_block_invoke + 41
    frame #38: 0x00007fff392904f5 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    frame #39: 0x00007fff39290427 CoreFoundation`__CFRunLoopDoObservers + 457
    frame #40: 0x00007fff3928f9c5 CoreFoundation`__CFRunLoopRun + 874
    frame #41: 0x00007fff3928effe CoreFoundation`CFRunLoopRunSpecific + 462
    frame #42: 0x00007fff37ec2abd HIToolbox`RunCurrentEventLoopInMode + 292
    frame #43: 0x00007fff37ec27d5 HIToolbox`ReceiveNextEventCommon + 584
    frame #44: 0x00007fff37ec2579 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 64
    frame #45: 0x00007fff3650dc99 AppKit`_DPSNextEvent + 883
    frame #46: 0x00007fff3650c4e0 AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1352
    frame #47: 0x00007fff364fe1ee AppKit`-[NSApplication run] + 658
    frame #48: 0x00000000773a7635 libwx_osx_cocoau_core-3.1.dylib`wxGUIEventLoop::OSXDoRun() + 165
    frame #49: 0x0000000072395c03 libwx_baseu-3.1.dylib`wxCFEventLoop::DoRun() + 29
    frame #50: 0x00000000722f2fce libwx_baseu-3.1.dylib`wxEventLoopBase::Run() + 158
    frame #51: 0x00000000722c8dbc libwx_baseu-3.1.dylib`wxAppConsoleBase::MainLoop() + 90
    frame #52: 0x00000000773513e0 libwx_osx_cocoau_core-3.1.dylib`wxApp::OnRun() + 26
    frame #53: 0x0000000072327723 libwx_baseu-3.1.dylib`wxEntry(int&, wchar_t**) + 56
    frame #54: 0x0000000071939e55 wxe_driver.so`wxe_main_loop(void*) + 117
    frame #55: 0x000000001bebdac0 beam.smp`erts_sys_main_thread + 416
    frame #56: 0x000000001bd812be beam.smp`erl_start + 11342
    frame #57: 0x000000001bcfe1b9 beam.smp`main + 9
    frame #58: 0x00007fff731d7cc9 libdyld.dylib`start + 1
  thread #2, name = 'sys_sig_dispatc'
    frame #0: 0x00007fff7331981e libsystem_kernel.dylib`read + 10
    frame #1: 0x000000001bebdc7a beam.smp`signal_dispatcher_thread_func + 90
    frame #2: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #3, name = 'sys_msg_dispatc'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001bdaae36 beam.smp`erts_cnd_wait + 70
    frame #4: 0x000000001bdaa4f5 beam.smp`sys_msg_dispatcher_func + 389
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #4, name = 'async_1'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf523f0 beam.smp`wait__ + 160
    frame #3: 0x000000001be54ce4 beam.smp`async_main + 756
    frame #4: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #5: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #6: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #5, name = '1_scheduler'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001bec37a1 beam.smp`erts_poll_wait + 545
    frame #2: 0x000000001bec66da beam.smp`erts_check_io + 154
    frame #3: 0x000000001bd2d5ba beam.smp`erts_schedule + 18426
    frame #4: 0x000000001bcfe2ca beam.smp`process_main + 250
    frame #5: 0x000000001bd26a08 beam.smp`sched_thread_func + 424
    frame #6: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #7: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #8: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #6, name = '2_scheduler'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bcfe2ca beam.smp`process_main + 250
    frame #4: 0x000000001bd26a08 beam.smp`sched_thread_func + 424
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #7, name = '3_scheduler'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bcfe2ca beam.smp`process_main + 250
    frame #4: 0x000000001bd26a08 beam.smp`sched_thread_func + 424
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #8, name = '4_scheduler'
    frame #0: 0x000000001bd0c30e beam.smp`process_main + 57662
    frame #1: 0x000000001bd26a08 beam.smp`sched_thread_func + 424
    frame #2: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #9, name = '5_scheduler'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bcfe2ca beam.smp`process_main + 250
    frame #4: 0x000000001bd26a08 beam.smp`sched_thread_func + 424
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #10, name = '6_scheduler'
    frame #0: 0x000000001bd02a41 beam.smp`process_main + 18545
    frame #1: 0x000000001bd26a08 beam.smp`sched_thread_func + 424
    frame #2: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #11, name = '7_scheduler'
    frame #0: 0x000000001bd0298d beam.smp`process_main + 18365
    frame #1: 0x000000001bd26a08 beam.smp`sched_thread_func + 424
    frame #2: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #12, name = '8_scheduler'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bcfe2ca beam.smp`process_main + 250
    frame #4: 0x000000001bd26a08 beam.smp`sched_thread_func + 424
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #13, name = '1_dirty_cpu_sch'
    frame #0: 0x000000001be5fc79 beam.smp`sweep_off_heap + 185
    frame #1: 0x000000001be59689 beam.smp`garbage_collect + 11561
    frame #2: 0x000000001be5a1f3 beam.smp`erts_garbage_collect_nobump + 211
    frame #3: 0x000000001bd328a0 beam.smp`erts_execute_dirty_system_task + 480
    frame #4: 0x000000001bd1cd18 beam.smp`erts_dirty_process_main + 136
    frame #5: 0x000000001bd26ade beam.smp`sched_dirty_cpu_thread_func + 190
    frame #6: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #7: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #8: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #14, name = '2_dirty_cpu_sch'
    frame #0: 0x000000001be5fc69 beam.smp`sweep_off_heap + 169
    frame #1: 0x000000001be61357 beam.smp`full_sweep_heaps + 3687
    frame #2: 0x000000001be575a7 beam.smp`garbage_collect + 3143
    frame #3: 0x000000001be5a1f3 beam.smp`erts_garbage_collect_nobump + 211
    frame #4: 0x000000001bd328a0 beam.smp`erts_execute_dirty_system_task + 480
    frame #5: 0x000000001bd1cd18 beam.smp`erts_dirty_process_main + 136
    frame #6: 0x000000001bd26ade beam.smp`sched_dirty_cpu_thread_func + 190
    frame #7: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #8: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #9: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #15, name = '3_dirty_cpu_sch'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf523f0 beam.smp`wait__ + 160
    frame #3: 0x000000001bd2ccc2 beam.smp`erts_schedule + 16130
    frame #4: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #5: 0x000000001bd26ade beam.smp`sched_dirty_cpu_thread_func + 190
    frame #6: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #7: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #8: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #16, name = '4_dirty_cpu_sch'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf523f0 beam.smp`wait__ + 160
    frame #3: 0x000000001bd2ccc2 beam.smp`erts_schedule + 16130
    frame #4: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #5: 0x000000001bd26ade beam.smp`sched_dirty_cpu_thread_func + 190
    frame #6: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #7: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #8: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #17, name = '5_dirty_cpu_sch'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #4: 0x000000001bd26ade beam.smp`sched_dirty_cpu_thread_func + 190
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #18, name = '6_dirty_cpu_sch'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf523f0 beam.smp`wait__ + 160
    frame #3: 0x000000001bd2ccc2 beam.smp`erts_schedule + 16130
    frame #4: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #5: 0x000000001bd26ade beam.smp`sched_dirty_cpu_thread_func + 190
    frame #6: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #7: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #8: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #19, name = '7_dirty_cpu_sch'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf523f0 beam.smp`wait__ + 160
    frame #3: 0x000000001bd2ccc2 beam.smp`erts_schedule + 16130
    frame #4: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #5: 0x000000001bd26ade beam.smp`sched_dirty_cpu_thread_func + 190
    frame #6: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #7: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #8: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #20, name = '8_dirty_cpu_sch'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #4: 0x000000001bd26ade beam.smp`sched_dirty_cpu_thread_func + 190
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #21, name = '1_dirty_io_sche'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #4: 0x000000001bd26bc4 beam.smp`sched_dirty_io_thread_func + 196
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #22, name = '2_dirty_io_sche'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e346a erlzmq_nif.so`erlzmq_nif_socket_command(env=0x00007000023e5e60, argc=3, argv=0x000000001dce6800) at erlzmq_nif.c:358:3
    frame #5: 0x000000001be8f9ef beam.smp`erts_call_dirty_nif + 383
    frame #6: 0x000000001bd1cfce beam.smp`erts_dirty_process_main + 830
    frame #7: 0x000000001bd26bc4 beam.smp`sched_dirty_io_thread_func + 196
    frame #8: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #9: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #10: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #23, name = '3_dirty_io_sche'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #4: 0x000000001bd26bc4 beam.smp`sched_dirty_io_thread_func + 196
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #24, name = '4_dirty_io_sche'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #4: 0x000000001bd26bc4 beam.smp`sched_dirty_io_thread_func + 196
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #25, name = '5_dirty_io_sche'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #4: 0x000000001bd26bc4 beam.smp`sched_dirty_io_thread_func + 196
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #26, name = '6_dirty_io_sche'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #4: 0x000000001bd26bc4 beam.smp`sched_dirty_io_thread_func + 196
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #27, name = '7_dirty_io_sche'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #4: 0x000000001bd26bc4 beam.smp`sched_dirty_io_thread_func + 196
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #28, name = '8_dirty_io_sche'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #4: 0x000000001bd26bc4 beam.smp`sched_dirty_io_thread_func + 196
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #29, name = '9_dirty_io_sche'
    frame #0: 0x00007fff73318f02 libsystem_kernel.dylib`swtch_pri + 10
    frame #1: 0x00007fff733d9698 libsystem_pthread.dylib`sched_yield + 11
    frame #2: 0x000000001bd2c882 beam.smp`erts_schedule + 15042
    frame #3: 0x000000001bd1cdbd beam.smp`erts_dirty_process_main + 301
    frame #4: 0x000000001bd26bc4 beam.smp`sched_dirty_io_thread_func + 196
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #30, name = '10_dirty_io_sch'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e346a erlzmq_nif.so`erlzmq_nif_socket_command(env=0x000070000268de60, argc=3, argv=0x000000001de08340) at erlzmq_nif.c:358:3
    frame #5: 0x000000001be8f9ef beam.smp`erts_call_dirty_nif + 383
    frame #6: 0x000000001bd1cfce beam.smp`erts_dirty_process_main + 830
    frame #7: 0x000000001bd26bc4 beam.smp`sched_dirty_io_thread_func + 196
    frame #8: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #9: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #10: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #31, name = 'aux'
    frame #0: 0x00007fff733210fe libsystem_kernel.dylib`__select + 10
    frame #1: 0x000000001bed2bd0 beam.smp`erts_poll_wait_flbk + 864
    frame #2: 0x000000001bec66ab beam.smp`erts_check_io + 107
    frame #3: 0x000000001bd26ee6 beam.smp`aux_thread + 774
    frame #4: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #5: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #6: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #32, name = '0_poller'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001bec3659 beam.smp`erts_poll_wait + 217
    frame #2: 0x000000001bec66da beam.smp`erts_check_io + 154
    frame #3: 0x000000001bd27358 beam.smp`poll_thread + 872
    frame #4: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #5: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #6: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #33, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001cf452b8) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #34, name = 'ZMQbg/Reaper'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
* thread #35, name = 'ZMQbg/IO/0', stop reason = signal SIGABRT
  * frame #0: 0x00007fff7331f33a libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007fff733dbe60 libsystem_pthread.dylib`pthread_kill + 430
    frame #2: 0x00007fff732a6808 libsystem_c.dylib`abort + 120
    frame #3: 0x000000001f9236e9 libzmq.5.dylib`zmq::zmq_abort(char const*) + 9
    frame #4: 0x000000001f953f0b libzmq.5.dylib`zmq::stream_engine_t::restart_input() + 651
    frame #5: 0x000000001f9426b8 libzmq.5.dylib`non-virtual thunk to zmq::session_base_t::write_activated(zmq::pipe_t*) + 136
    frame #6: 0x000000001f924afc libzmq.5.dylib`zmq::io_thread_t::in_event() + 60
    frame #7: 0x000000001f928658 libzmq.5.dylib`zmq::kqueue_t::loop() + 408
    frame #8: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #9: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #10: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #36, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331f3d6 libsystem_kernel.dylib`poll + 10
    frame #1: 0x000000001f944f2b libzmq.5.dylib`zmq::signaler_t::wait(int) + 59
    frame #2: 0x000000001f9296c2 libzmq.5.dylib`zmq::mailbox_t::recv(zmq::command_t*, int) + 66
    frame #3: 0x000000001f946ef7 libzmq.5.dylib`zmq::socket_base_t::process_commands(int, bool) + 71
    frame #4: 0x000000001f94a08a libzmq.5.dylib`zmq::socket_base_t::recv(zmq::msg_t*, int) + 394
    frame #5: 0x000000001f96606f libzmq.5.dylib`zmq_recvmsg + 47
    frame #6: 0x000000001c2e4bef erlzmq_nif.so`erlzmq_socket_command_recv(socket=0x000000001cf45380, env=0x000070000268de60, argc=1, argv=0x00000000225089b8) at erlzmq_nif.c:897:7
    frame #7: 0x000000001c2e3258 erlzmq_nif.so`socket_thread(socket=0x000000001cf45380) at erlzmq_nif.c:1591:37
    frame #8: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #9: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #10: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #37, name = 'ZMQbg/Reaper'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #38, name = 'ZMQbg/IO/0'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #39, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001cf43820) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #40, name = 'ZMQbg/Reaper'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #41, name = 'ZMQbg/IO/0'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #42, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331f3d6 libsystem_kernel.dylib`poll + 10
    frame #1: 0x000000001f944f2b libzmq.5.dylib`zmq::signaler_t::wait(int) + 59
    frame #2: 0x000000001f9296c2 libzmq.5.dylib`zmq::mailbox_t::recv(zmq::command_t*, int) + 66
    frame #3: 0x000000001f946ef7 libzmq.5.dylib`zmq::socket_base_t::process_commands(int, bool) + 71
    frame #4: 0x000000001f94a08a libzmq.5.dylib`zmq::socket_base_t::recv(zmq::msg_t*, int) + 394
    frame #5: 0x000000001f96606f libzmq.5.dylib`zmq_recvmsg + 47
    frame #6: 0x000000001c2e4bef erlzmq_nif.so`erlzmq_socket_command_recv(socket=0x000000001cf45448, env=0x00007000023e5e60, argc=1, argv=0x0000000069588268) at erlzmq_nif.c:897:7
    frame #7: 0x000000001c2e3258 erlzmq_nif.so`socket_thread(socket=0x000000001cf45448) at erlzmq_nif.c:1591:37
    frame #8: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #9: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #10: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #43, name = 'ZMQbg/Reaper'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #44, name = 'ZMQbg/IO/0'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #45, name = 'ZMQbg/Reaper'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #46, name = 'ZMQbg/IO/0'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #47, name = 'ZMQbg/Reaper'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #48, name = 'ZMQbg/IO/0'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #49, name = 'ZMQbg/Reaper'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #50, name = 'ZMQbg/IO/0'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #51, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001cf438e8) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #52, name = 'ZMQbg/Reaper'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #53, name = 'ZMQbg/IO/0'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #54, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001cf434e0) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #55, name = 'ZMQbg/Reaper'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #56, name = 'ZMQbg/IO/0'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #58, name = 'ZMQbg/Reaper'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #59, name = 'ZMQbg/IO/0'
    frame #0: 0x00007fff7331d766 libsystem_kernel.dylib`kevent + 10
    frame #1: 0x000000001f9285cc libzmq.5.dylib`zmq::kqueue_t::loop() + 268
    frame #2: 0x000000001f958d9d libzmq.5.dylib`thread_routine(void*) + 61
    frame #3: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #4: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #60, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001cf40420) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #62, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001cf40aa8) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #63, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001cf43288) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #65, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001e13e4a8) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #67, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001e11c480) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #68, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001e11b8c8) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #69, name = 'erlzmq_socket_t'
    frame #0: 0x00007fff7331b882 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff733dc425 libsystem_pthread.dylib`_pthread_cond_wait + 698
    frame #2: 0x000000001bf4f829 beam.smp`ethr_cond_wait + 9
    frame #3: 0x000000001be7fddb beam.smp`erl_drv_cond_wait + 43
    frame #4: 0x000000001c2e3226 erlzmq_nif.so`socket_thread(socket=0x000000001eb47698) at erlzmq_nif.c:1588:5
    frame #5: 0x000000001bf51e2c beam.smp`thr_wrapper + 156
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #81, name = 'com.apple.NSEventThread'
    frame #0: 0x00007fff73318dfa libsystem_kernel.dylib`mach_msg_trap + 10
    frame #1: 0x00007fff73319170 libsystem_kernel.dylib`mach_msg + 60
    frame #2: 0x00007fff392910b5 CoreFoundation`__CFRunLoopServiceMachPort + 247
    frame #3: 0x00007fff3928fb82 CoreFoundation`__CFRunLoopRun + 1319
    frame #4: 0x00007fff3928effe CoreFoundation`CFRunLoopRunSpecific + 462
    frame #5: 0x00007fff366af5b4 AppKit`_NSEventThread + 132
    frame #6: 0x00007fff733dc109 libsystem_pthread.dylib`_pthread_start + 148
    frame #7: 0x00007fff733d7b8b libsystem_pthread.dylib`thread_start + 15
  thread #87
    frame #0: 0x00007fff7331a4ce libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00007fff733d8aa1 libsystem_pthread.dylib`_pthread_wqthread + 390
    frame #2: 0x00007fff733d7b77 libsystem_pthread.dylib`start_wqthread + 15
  thread #88
    frame #0: 0x00007fff7331a4ce libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00007fff733d8aa1 libsystem_pthread.dylib`_pthread_wqthread + 390
    frame #2: 0x00007fff733d7b77 libsystem_pthread.dylib`start_wqthread + 15
  thread #89
    frame #0: 0x00007fff7331a4ce libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00007fff733d8aa1 libsystem_pthread.dylib`_pthread_wqthread + 390
    frame #2: 0x00007fff733d7b77 libsystem_pthread.dylib`start_wqthread + 15
  thread #90
    frame #0: 0x00007fff7331a4ce libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00007fff733d8aa1 libsystem_pthread.dylib`_pthread_wqthread + 390
    frame #2: 0x00007fff733d7b77 libsystem_pthread.dylib`start_wqthread + 15
  thread #91
    frame #0: 0x00007fff7331a4ce libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00007fff733d8aa1 libsystem_pthread.dylib`_pthread_wqthread + 390
    frame #2: 0x00007fff733d7b77 libsystem_pthread.dylib`start_wqthread + 15
  thread #92
    frame #0: 0x00007fff7331a4ce libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00007fff733d8aa1 libsystem_pthread.dylib`_pthread_wqthread + 390
    frame #2: 0x00007fff733d7b77 libsystem_pthread.dylib`start_wqthread + 15
  thread #93
    frame #0: 0x00007fff7331a4ce libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00007fff733d8aa1 libsystem_pthread.dylib`_pthread_wqthread + 390
    frame #2: 0x00007fff733d7b77 libsystem_pthread.dylib`start_wqthread + 15
  thread #94
    frame #0: 0x00007fff7331a4ce libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00007fff733d8aa1 libsystem_pthread.dylib`_pthread_wqthread + 390
    frame #2: 0x00007fff733d7b77 libsystem_pthread.dylib`start_wqthread + 15

What's the expected result?

No crash

lukaszsamson commented 4 years ago

Possibly related to https://github.com/zeromq/libzmq/issues/3596

lukaszsamson commented 3 years ago

Strangely the issue stopped happening with no changes in code. I remember that around that time our administrators reconfigured/updated our company VPN. My guess is that some bug in OpenVPN was the culprit here.

lukaszsamson commented 3 years ago

The issue reappeared on our production environment (Linux). Test environment with slightly less load is not affected (and less connections to other zmq endpoints). The crash happens once or twice per day so it's pretty rare.

lukaszsamson commented 3 years ago

I can reproduce it reliably on current master. Steps:

  1. In process 1 create a pub socket, bind to tcp port and start sending messages
  2. In process 2 create a sub socket, set rcvhwm to 1 and heartbeat_ivl to 5000, connect and subscribe
  3. Start receiving messages in a loop
  4. Send a signal to process 2 to pause it.
  5. Wait 5s
  6. Resume process

My initial investigation indicates that when the heartbeat timeout fires zmq::session_base_t::engine_error is called and a new instance of zmq::stream_engine_base_t is created with _input_stopped set to false. I can see that zmq::stream_engine_base_t::in_event_internal is called regularly, but it never reaches _input_stopped = true;. Later on, when the process is resumed and it calls recv, zmq::stream_engine_base_t::restart_input is attempted which triggers the assert.

The bug is definitively related to #3596

Edit: The above steps reproduce the bug 100% times in a simple erlang app using erlzmq bindings. However, I wasn't able to reproduce it in a simple C program. In erlang program when I hit ctrl+c i see the following sequence of calls:

BREAK: (a)bort (A)bort with dump (c)ontinue (p)roc info (i)nfo
       (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution
cmd 5 (zmq::object_t::process_command)
recv returns success
calling recv
recv returns success
cmd 6 (zmq::object_t::process_command)
setting _input_stopped = true
(and 5 second later)
cmd 1 (zmq::object_t::process_command)
cmd 2 (zmq::object_t::process_command)
setting _input_stopped = false in ctor
cmd 3 (zmq::object_t::process_command)
cmd 11 (zmq::object_t::process_command)
cmd 12 (zmq::object_t::process_command)
cmd 13 (zmq::object_t::process_command)
(after resume)
calling recv
recv returns success
calling recv
cmd 6 (zmq::object_t::process_command)
Assertion failed: _input_stopped (src/stream_engine_base.cpp:419)

In C program the part after (and 5 second later) is never printed. It may be that erlang virtual machine does something nasty that breaks zmq assumptions. Any ideas how I can debug it further @bluca @brettviren?

mattia-badiali commented 1 year ago

Is there any update or plan to fix this issue? I am facing the same error after enabling zmq hearbeats on both pub and sub side.

esemeniuc commented 1 month ago

I'm also experiencing this on 4.3.5 with heartbeats on both sides of pub/sub

lukaszsamson commented 1 month ago

Pubsub socket is unusable with heartbeats (in our case with erlang bindings). Since I opened this issue 4 years ago we disabled heartbeats and instead implemented a custom heartbeat protocol over ordinary pub messages. The pub server will emit heartbeat messages every few seconds. The clients listen for heartbeats and if they don't receive them in time they would close the socket and reconnect. This workaround made the connections much more stable and zmq asserts are no longer crashing our production servers.