apache / apache/pulsar-client-cpp
When use pulsar::Message msg = pulsar::MessageBuilder().setContent(sMsg).build() to Create Message, sometimes it will occur segment fault
- Langage dominant
- C++
- Étoiles
- 71
- Forks
- 90
- Merge moyen
- 2 h 33 min
- PR mergées (30 j)
- 3
Description
(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;
}
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par reproduire le segfault de MessageBuilder::createMessageImpl dans pulsar-client-3.4/lib/MessageBuilder.cc:42, en utilisant la trace GDB comme symptôme initial. Inspectez ObjectPool.h, en particulier pop, allocate et create, et déterminez pourquoi head_ ou l’état du pool devient invalide. Le travail est considéré comme terminé lorsque la construction d’un message avec MessageBuilder ne plante plus dans les conditions signalées, avec une vérification de régression pour le problème.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- cpp
- Domaine
- distributed-systems
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100