Hi Folks,

I'm seeing crashing in qpid proton (qpid-proton-c-devel-0.9-3 on fc22) when
running my publisher at a decent rate (1000 msg/s) for a minute or so.

Does something like this look familiar? Somehow got into a state where
pn_data_grow is called, but the data node coming back from it points to an
invalid memory location.

(gdb)
bt
[31/1873]
#0  0x0000000006bf55df in pn_data_new (data=data@entry=0x5e6a090) at
/usr/src/debug/qpid-proton-0.9/proton-c/src/codec/codec.c:1126
#1  0x0000000006bf5de8 in pn_data_add (data=data@entry=0x5e6a090) at
/usr/src/debug/qpid-proton-0.9/proton-c/src/codec/codec.c:1397
#2  0x0000000006bf5fa8 in pn_data_put_ubyte (data=data@entry=0x5e6a090,
ub=<optimized out>) at
/usr/src/debug/qpid-proton-0.9/proton-c/src/codec/codec.c:1485
#3  0x00000000069c4c14 in qpidBridgeMsgCodec_pack (bridgeMessage=0x5e61fb0,
target=target@entry=0x5e6b2c0, protonMessage=protonMessage@entry
=0xffefff528)
    at mama/c_cpp/src/c/bridge/qpid/codec.c:119
#4  0x00000000069c5fd2 in qpidBridgePublisherImpl_enqueueMessageForAddress
(msg=msg@entry=0x5e6b2c0, url=<optimized out>, impl=impl@entry=0x5e61f30)
    at mama/c_cpp/src/c/bridge/qpid/publisher.c:629
#5  0x00000000069c63cd in qpidBridgeMamaPublisher_send
(publisher=0x5e61f30, msg=0x5e6b2c0) at
mama/c_cpp/src/c/bridge/qpid/publisher.c:295
#6  0x0000000004e6be97 in mamaPublisher_send (publisher=0x5e61dc0,
msg=msg@entry=0x5e6b2c0) at mama/c_cpp/src/c/publisher.c:258
#7  0x000000000040577d in publishMessageRdtsc (pubIndex=<optimized out>,
msgSample=<optimized out>, nowTsc=<optimized out>) at
mama/c_cpp/src/testtools/performance/c/mamaproducerc_v2.c:1620
#8  0x0000000000403b20 in main (argc=<optimized out>, argv=<optimized out>)
at mama/c_cpp/src/testtools/performance/c/mamaproducerc_v2.c:782
(gdb) l
1121    {
1122      if (data->capacity <= data->size) {
1123        pn_data_grow(data);
1124      }
1125      pni_node_t *node = pn_data_node(data, ++(data->size));
1126      node->next = 0;
1127      node->down = 0;
1128      node->children = 0;
1129      return node;
1130    }
(gdb) print *data
$11 = {nodes = 0x0, buf = 0x5e6a5d0, decoder = 0x5e6a6c0, encoder =
0x5e6a790, error = 0x5e6a850, str = 0x5e6a8c0, capacity = 0, size = 32769,
parent = 1, current = 0, base_parent = 0,
  base_current = 0}
(gdb) print node
$12 = (pni_node_t *) 0x240000 <---- invalid memory location

I ran it through valgrind as well and couldn't see any invalid memory
trouncing leading up to the event:

==2332== Invalid write of size 2
==2332==    at 0x6BF55DF: pn_data_new (codec.c:1126)
==2332==    by 0x6BF5DE7: pn_data_add (codec.c:1397)
==2332==    by 0x6BF5FA7: pn_data_put_ubyte (codec.c:1485)
==2332==    by 0x69C4C13: qpidBridgeMsgCodec_pack (codec.c:119)
==2332==    by 0x69C5FD1: qpidBridgePublisherImpl_enqueueMessageForAddress
(publisher.c:629)
==2332==    by 0x69C63CC: qpidBridgeMamaPublisher_send (publisher.c:295)
==2332==    by 0x4E6BE96: mamaPublisher_send (publisher.c:258)
==2332==    by 0x40577C: publishMessageRdtsc (mamaproducerc_v2.c:1620)
==2332==    by 0x403B1F: main (mamaproducerc_v2.c:782)
==2332==  Address 0x240034 is not stack'd, malloc'd or (recently) free'd
==2332==
==2332==
==2332== Process terminating with default action of signal 11 (SIGSEGV):
dumping core
==2332==  Access not within mapped region at address 0x240034
==2332==    at 0x6BF55DF: pn_data_new (codec.c:1126)
==2332==    by 0x6BF5DE7: pn_data_add (codec.c:1397)
==2332==    by 0x6BF5FA7: pn_data_put_ubyte (codec.c:1485)
==2332==    by 0x69C4C13: qpidBridgeMsgCodec_pack (codec.c:119)
==2332==    by 0x69C5FD1: qpidBridgePublisherImpl_enqueueMessageForAddress
(publisher.c:629)
==2332==    by 0x69C63CC: qpidBridgeMamaPublisher_send (publisher.c:295)
==2332==    by 0x4E6BE96: mamaPublisher_send (publisher.c:258)
==2332==    by 0x40577C: publishMessageRdtsc (mamaproducerc_v2.c:1620)
==2332==    by 0x403B1F: main (mamaproducerc_v2.c:782)
==2332==  If you believe this happened as a result of a stack
==2332==  overflow in your program's main thread (unlikely but
==2332==  possible), you can try to increase the size of the
==2332==  main thread stack using the --main-stacksize= flag.
==2332==  The main thread stack size used in this run was 8388608.


Cheers,
Frank

Reply via email to