apache / apache/pulsar-client-cpp

[Bug] Pulsar client can't have static storage duration

未关闭
#56 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
C++
星标
71
派生
90
平均合并
2 小时 33 分钟
30 天内合并 PR
3

描述

### Search before asking

- [X] I searched in the [issues](https://github.com/apache/pulsar-client-cpp/issues) and found nothing similar.

### Version

- pulsar client 2.9.0
- ubuntu linux

### Minimal reproduce step

int main(int argc, char** argv)
{
static ::pulsar::Client client{"pulsar://0.0.0.0:6650"};
// don't call client.close();
return 0;
}

### What did you expect to see?

The program should terminate gracefully, instead it seg faults. If I call client.close(), there is no issue.

### What did you see instead?

The program seg faults with the following trace:

In gdb:
```
Program received signal SIGSEGV, Segmentation fault.
0x000000000000001e in ?? ()
(gdb) bt
#0 0x000000000000001e in ?? ()
#1 0x00007fb5adff4bef in ?? () from /lib/libpulsar.so.2.9.2.13
#2 0x00007fb5adff76e4 in ?? () from /lib/libpulsar.so.2.9.2.13
#3 0x00000000002e0873 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0xb1e400) at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:155
#4 0x00000000002e082a in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x51b370 ) at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:730
#5 0x00000000002e0f29 in std::__shared_ptr::~__shared_ptr (this=0x51b368 ) at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:1169
#6 0x00000000002e0f05 in std::shared_ptr::~shared_ptr (this=0x51b368 ) at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr.h:103
#7 0x00000000002dfde5 in pulsar::Client::~Client (this=0x51b368 ) at /usr/include/pulsar/Client.h:46
#8 0x00007fb5ad93f8a7 in __run_exit_handlers (status=0, listp=0x7fb5adae5718 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at exit.c:108
#9 0x00007fb5ad93fa60 in __GI_exit (status=) at exit.c:139
#10 0x00007fb5ad91d08a in __libc_start_main (main=0x2df330 , argc=3, argv=0x7ffd9fae0c18, init=, fini=, rtld_fini=, stack_end=0x7ffd9fae0c08) at ../csu/libc-start.c:342
#11 0x00000000002df26e in _start ()
```

### Anything else?

_No response_

### Are you willing to submit a PR?

- [ ] I'm willing to submit a PR!

贡献指南

打开贡献指南

调研方向

从 Ubuntu 上最小的静态 pulsar::Client 复现开始,并检查 /usr/include/pulsar/Client.h 中的 pulsar::Client::~Client,然后使用提供的 gdb 回溯跟踪 shutdown 和 shared-pointer 的销毁。确认在没有 client.close(); 的情况下执行静态销毁时会发生故障;当程序无需显式 close 即可正常退出时即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
cpp
领域
distributed-systems
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
42/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。