apache / apache/pulsar-client-cpp
When use pulsar::Message msg = pulsar::MessageBuilder().setContent(sMsg).build() to Create Message, sometimes it will occur segment fault
- Linguagem predominante
- C++
- Estrelas
- 71
- Forks
- 90
- Merge médio
- 2h 33min
- PRs com merge (30d)
- 3
Descrição
(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;
}
Guia de contribuição
Direção de pesquisa
Comece reproduzindo o segfault de MessageBuilder::createMessageImpl em pulsar-client-3.4/lib/MessageBuilder.cc:42, usando o rastreamento do GDB como sintoma inicial. Inspecione ObjectPool.h, especialmente pop, allocate e create, e determine por que head_ ou o estado do pool se torna inválido. O trabalho estará concluído quando construir uma mensagem com MessageBuilder não causar mais uma falha nas condições relatadas, com uma verificação de regressão para a falha.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- cpp
- Domínio
- distributed-systems
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100