gpt4 book ai didi

c++ - 调用 zmq_poll() 如何导致调用 zmq_abort()?

转载 作者:行者123 更新时间:2023-11-28 04:50:05 28 4
gpt4 key购买 nike

我使用的是 zmq 版本 4.2.2。我的程序因调用 zmq_abort() 而崩溃,后者调用了 abort()。根据堆栈跟踪,如果我理解正确,zmq_abort() 是从 src/socket_poller.cpp:54 调用的。但是,该行是函数定义的开头:

zmq::socket_poller_t::~socket_poller_t ()

该函数没有直接调用 zmq_abort() 或任何会调用它的断言宏。整个文件中也没有很多断言或对 zmq_abort() 的直接调用。但是,堆栈跟踪中的其他行似乎与 github 中的源代码匹配:

https://github.com/zeromq/libzmq/blob/v4.2.2/src/socket_poller.cpp#L54

执行如何在 zmq_abort() 中结束?

堆栈跟踪的开始:

Program terminated with signal SIGABRT, Aborted.
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
[Current thread is 1 (Thread 0x7f12cc9d4700 (LWP 23680))]
(gdb) where
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007f12ce123415 in __GI_abort () at abort.c:90
#2 0x00007f12ce8db9c9 in zmq::zmq_abort (errmsg_=<optimized out>) at ../zeromq-4.2.2/src/err.cpp:87
#3 0x00007f12ce918cbe in zmq::socket_poller_t::~socket_poller_t (this=0x7f12c8004150,
__in_chrg=<optimized out>) at ../zeromq-4.2.2/src/socket_poller.cpp:54
#4 0x00007f12ce91793a in zmq_poller_destroy (poller_p_=0x7f12cc9d2af8)
at ../zeromq-4.2.2/src/zmq.cpp:1236
#5 0x00007f12ce917e14 in zmq_poller_poll (timeout_=<optimized out>, nitems_=2, items_=0x1)
at ../zeromq-4.2.2/src/zmq.cpp:854
#6 zmq_poll (items_=items_@entry=0x7f12cc9d2c20, nitems_=nitems_@entry=2, timeout_=timeout_@entry=5000)
at ../zeromq-4.2.2/src/zmq.cpp:866

最佳答案

zmq_abort() 是从 signaler_t 的析构函数中的断言宏调用的: https://github.com/zeromq/libzmq/blob/v4.2.2/src/signaler.cpp#L143 . signaler_t 对象是 socket_poller_t 的成员。我不确定为什么在堆栈跟踪中没有显示对析构函数的调用。

我试图不(直接)询问我的代码有什么问题,因为提供代码示例是不可行的,但我会提到,结果是文件描述符在另一个线程中被错误地关闭了两次.在两次关闭操作之间,zmq_poll() 创建了一个 socket_poller_t 对象。 signaler_t 的构造函数打开了一个 eventfd,它与之前关闭的 fd(编号)相同。然后,另一个线程再次关闭同一个 fd,导致析构函数在 close() 上获取 EBADF 并调用 zmq_abort()

关于c++ - 调用 zmq_poll() 如何导致调用 zmq_abort()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48402683/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com