I&#39;m not familiar with the Net::RabbitMQ perl module or how it leverages the rabbitmq-c library, so grain of salt here:<div><br></div><div>Without looking at your code, I&#39;m guessing that you don&#39;t to re-connect to the broker after the broker is cycled.</div>
<div><br></div><div>When the broker is stopped and brought back up all connections are disconnected.  Trying to use a connection will result in an error claiming the socket is closed.  On the client side, you need to detect that your connection to the broker has failed, and take appropriate actions to reconnect to the broker before trying to get or consume a message.</div>
<div><br></div><div>I am curious about the segfault you are seeing.  Do you have a succinct example that can reproduce this segfault?</div><div><br></div><div>-Alan</div><div><br></div><div><div class="gmail_quote">On Tue, Apr 3, 2012 at 9:25 AM, Matti Linnanvuori <span dir="ltr">&lt;<a href="mailto:matti.linnanvuori@portalify.com">matti.linnanvuori@portalify.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi!<div><br></div><div>I have encountered two possible faults in librabbitmq (rabbitmq-c-fb6fca832fd2). I am trying to use that latest version customized with Perl Net::RabbitMQ on SLES 11 SP 1.</div>
<div><br></div><div>One is that amqp_simple_wait_frame and recv do not respond to messages being published to an exchange after rabbitmqctl stop_app, reset and start_app. That problem appears also with Net::RabbitMQ versions 0.2.2 and 0.2.0.</div>
<div><br></div><div>Another is that amqp_basic_get fails with error Operation not permitted after rabbitmqctl stop_app, reset and start_app.  That problem appears also with Net::RabbitMQ versions 0.2.2 and 0.2.0, but there is a segmentation fault.</div>
<div><br></div><div>I got the following state in gdb with recv:</div><div><br></div><div><div>0x00007f38e70b7935 in recv () from /lib64/libpthread.so.0</div><div>(gdb) bt</div><div>#0  0x00007f38e70b7935 in recv () from /lib64/libpthread.so.0</div>
<div>#1  0x00007f38e5cfba4d in recv (__flags=&lt;value optimized out&gt;, </div><div>    __n=&lt;value optimized out&gt;, __buf=&lt;value optimized out&gt;, </div><div>    __fd=&lt;value optimized out&gt;) at /usr/include/bits/socket2.h:45</div>
<div>#2  wait_frame_inner (__flags=&lt;value optimized out&gt;, </div><div>    __n=&lt;value optimized out&gt;, __buf=&lt;value optimized out&gt;, </div><div>    __fd=&lt;value optimized out&gt;) at amqp_socket.c:182</div>
<div>#3  0x00007f38e5ce78b9 in internal_recv (RETVAL=0xbf4f68, conn=0xbe1440, </div><div>    piggyback=0) at RabbitMQ.xs:77</div><div>#4  0x00007f38e5ce8566 in XS_Net__RabbitMQ_recv (</div><div>    my_perl=&lt;value optimized out&gt;, cv=&lt;value optimized out&gt;) at RabbitMQ.xs:424</div>
<div>#5  0x000000000047e115 in Perl_pp_entersub ()</div><div>#6  0x0000000000455ad3 in Perl_runops_debug ()</div><div>#7  0x000000000047a1af in perl_run ()</div><div>#8  0x000000000042172c in main ()</div><div>(gdb) continue</div>
<div>Continuing.</div><div>^C</div><div>Program received signal SIGINT, Interrupt.</div><div>0x00007f38e70b7935 in recv () from /lib64/libpthread.so.0</div><div>(gdb) bt</div><div>#0  0x00007f38e70b7935 in recv () from /lib64/libpthread.so.0</div>
<div>#1  0x00007f38e5cfba4d in recv (__flags=&lt;value optimized out&gt;, </div><div>    __n=&lt;value optimized out&gt;, __buf=&lt;value optimized out&gt;, </div><div>    __fd=&lt;value optimized out&gt;) at /usr/include/bits/socket2.h:45</div>
<div>#2  wait_frame_inner (__flags=&lt;value optimized out&gt;, </div><div>    __n=&lt;value optimized out&gt;, __buf=&lt;value optimized out&gt;, </div><div>    __fd=&lt;value optimized out&gt;) at amqp_socket.c:182</div>
<div>#3  0x00007f38e5ce78b9 in internal_recv (RETVAL=0xbf4f68, conn=0xbe1440, </div><div>    piggyback=0) at RabbitMQ.xs:77</div><div>#4  0x00007f38e5ce8566 in XS_Net__RabbitMQ_recv (</div><div>    my_perl=&lt;value optimized out&gt;, cv=&lt;value optimized out&gt;) at RabbitMQ.xs:424</div>
<div>#5  0x000000000047e115 in Perl_pp_entersub ()</div><div>#6  0x0000000000455ad3 in Perl_runops_debug ()</div><div>#7  0x000000000047a1af in perl_run ()</div><div>#8  0x000000000042172c in main ()</div><div>(gdb) up</div>
<div>#1  0x00007f38e5cfba4d in recv (__flags=&lt;value optimized out&gt;, </div><div>    __n=&lt;value optimized out&gt;, __buf=&lt;value optimized out&gt;, </div><div>    __fd=&lt;value optimized out&gt;) at /usr/include/bits/socket2.h:45</div>
<div>45<span style="white-space:pre-wrap">        </span>  return __recv_alias (__fd, __buf, __n, __flags);</div><div>(gdb) up</div><div>#2  wait_frame_inner (__flags=&lt;value optimized out&gt;, </div><div>    __n=&lt;value optimized out&gt;, __buf=&lt;value optimized out&gt;, </div>
<div>    __fd=&lt;value optimized out&gt;) at amqp_socket.c:182</div><div>182<span style="white-space:pre-wrap">        </span>    res = recv(state-&gt;sockfd, state-&gt;sock_inbound_buffer.bytes,</div><div>(gdb) up</div><div>#3  0x00007f38e5ce78b9 in internal_recv (RETVAL=0xbf4f68, conn=0xbe1440, </div>
<div>    piggyback=0) at RabbitMQ.xs:77</div><div>77<span style="white-space:pre-wrap">        </span>      result = amqp_simple_wait_frame(conn, &amp;frame);</div><div>(gdb) print conn</div><div>$1 = (amqp_connection_state_t) 0xbe1440</div>
<div>(gdb) print *conn</div><div>$2 = {frame_pool = {pagesize = 131072, pages = {num_blocks = 5, </div><div>      blocklist = 0xc5d4f0}, large_blocks = {num_blocks = 0, blocklist = 0x0}, </div><div>    next_page = 0, alloc_block = 0x0, alloc_used = 0}, decoding_pool = {</div>
<div>    pagesize = 131072, pages = {num_blocks = 1, blocklist = 0xbf22e0}, </div><div>    large_blocks = {num_blocks = 0, blocklist = 0x0}, next_page = 0, </div><div>    alloc_block = 0x0, alloc_used = 0}, state = CONNECTION_STATE_IDLE, </div>
<div>  channel_max = 0, frame_max = 131072, heartbeat = 0, inbound_buffer = {</div><div>    len = 131072, bytes = 0x0}, inbound_offset = 0, target_size = 7, </div><div>  outbound_buffer = {len = 131072, bytes = 0xc67f90}, sockfd = 3, </div>
<div>  sock_inbound_buffer = {len = 131072, bytes = 0x7f38e7b57010}, </div><div>  sock_inbound_offset = 79, sock_inbound_limit = 79, first_queued_frame = 0x0, </div><div>  last_queued_frame = 0x0, most_recent_api_result = {</div>
<div>    reply_type = AMQP_RESPONSE_NORMAL, reply = {id = 3932181, </div><div>      decoded = 0x7f38e7af1038}, library_error = 0}}</div></div><div><br></div><div><br><div>
<div style="word-wrap:break-word"><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><div style="word-wrap:break-word">
<div>regards, Matti Linnanvuori</div></div></span></div>
</div>
<br></div></div><br>_______________________________________________<br>
rabbitmq-discuss mailing list<br>
<a href="mailto:rabbitmq-discuss@lists.rabbitmq.com">rabbitmq-discuss@lists.rabbitmq.com</a><br>
<a href="https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
<br></blockquote></div><br></div>