apache / apache/pulsar-client-cpp

When use pulsar::Message msg = pulsar::MessageBuilder().setContent(sMsg).build() to Create Message, sometimes it will occur segment fault

Đang mở
#476 4 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
C++
Star
71
Fork
90
Merge trung bình
2 giờ 33 phút
Pull request đã merge (30 ngày)
3

Mô tả

(gdb) bt
#0 pop (this=0x7f2b58df7900) at pulsar-client-3.4/lib/ObjectPool.h:74
#1 allocate (this=0x7f2b58df7900) at pulsar-client-3.4/lib/ObjectPool.h:134
#2 allocate (n=1, this=) at pulsar-client-3.4/lib/ObjectPool.h:167
#3 allocate (__a=, __n=1) at /usr/local/gcc-4.9.3/include/c++/4.9.3/bits/alloc_traits.h:357
#4 __shared_count > (__a=..., this=0x7f2b3e589ea8)
at /usr/local/gcc-4.9.3/include/c++/4.9.3/bits/shared_ptr_base.h:616
#5 __shared_ptr > (__a=..., __tag=..., this=0x7f2b3e589ea0,
this@entry=)
at /usr/local/gcc-4.9.3/include/c++/4.9.3/bits/shared_ptr_base.h:1090
#6 shared_ptr > (__a=..., __tag=..., this=0x7f2b3e589ea0)
at /usr/local/gcc-4.9.3/include/c++/4.9.3/bits/shared_ptr.h:316
#7 allocate_shared > (__a=...)
at /usr/local/gcc-4.9.3/include/c++/4.9.3/bits/shared_ptr.h:588
#8 create (this=0x2622ba0 ) at pulsar-client-3.4/lib/ObjectPool.h:212
#9 pulsar::MessageBuilder::createMessageImpl () at pulsar-client-3.4/lib/MessageBuilder.cc:42

(gdb) print head_
Cannot access memory at address 0x7f2b58df7900
(gdb) print result
$1 = (void *) 0x1

void* pop() {
if (!head_) {
// size = 0
std::lock_guard lock(mutex_);

if (!globalPool_) {
return NULL;
}

GlobalPool* poolEntry = globalPool_;
head_ = globalPool_->node_;
pushSize_ += globalPool_->nodeCount_;
globalNodeCount_ -= globalPool_->nodeCount_;
globalPool_ = globalPool_->next_;
delete poolEntry;
}
void* result = head_;
if (result) {
head_ = head_->next;
pushSize_--;
}
return result;
}

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu bằng cách tái hiện segfault của MessageBuilder::createMessageImpl trong pulsar-client-3.4/lib/MessageBuilder.cc:42, sử dụng trace GDB làm triệu chứng ban đầu. Kiểm tra ObjectPool.h, đặc biệt là pop, allocate và create, đồng thời xác định lý do head_ hoặc trạng thái của pool trở nên không hợp lệ. Công việc được xem là hoàn tất khi việc tạo một message bằng MessageBuilder không còn bị crash trong các điều kiện đã báo cáo, kèm theo một kiểm tra hồi quy cho lỗi này.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
cpp
Lĩnh vực
distributed-systems
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.