<div dir="ltr"><div>I got the following errors in an MPI process.<br></div><span style="font-family:monospace"><br></span><div style="margin-left:40px"><span style="font-family:monospace">Error getting event!</span><br><span style="font-family:monospace">[node3:mpi_rank_1][async_thread] src/mpid/ch3/channels/mrail/src/gen2/ibv_channel_manager.c:1307: Got FATAL event CQ error on CQ (nil)</span><br><span style="font-family:monospace">: Interrupted system call (4)</span><br><span style="font-family:monospace">*** Error in `program': double free or corruption (!prev): 0x000000000b8f3e40 ***</span><br><span style="font-family:monospace">======= Backtrace: =========</span><br><span style="font-family:monospace">/lib64/libc.so.6(+0x81489)[0x2b689c944489]</span><br><span style="font-family:monospace">/lib64/libc.so.6(+0x39b69)[0x2b689c8fcb69]</span><br><span style="font-family:monospace">/lib64/libc.so.6(+0x39bb7)[0x2b689c8fcbb7]</span><br><span style="font-family:monospace">.../third_party/lib/libmpi.so.12(async_thread+0x29c)[0x2b68ac651e4c]</span><br><span style="font-family:monospace">/lib64/libpthread.so.0(+0x7dd5)[0x2b689ae6edd5]</span><br><span style="font-family:monospace">/lib64/libc.so.6(clone+0x6d)[0x2b689c9c0ead]</span><br><span style="font-family:monospace">======= Memory map: ========</span><br><span style="font-family:monospace">[skipped]</span><br></div><br>The rest of the MPI processes just hung at that point.<br><br>If the "interrupted system call" is part of the same error report as the CQ error, perhaps a check for EINTR with a retry is needed somewhere?<br><br>I noticed in ibv_channel_manager.c / async_thread() that it sends the CQ error using ibv_ca_error_abort() which in turn prints the error message and the calls exit().  If the program is multithreaded (ours is) then exit triggers things like static destructors while some of the threads are still using that data and this causes cascading errors which makes it difficult to figure out the original error.  I think it would be better, if it has to exit, to use _exit() instead.  Even better would be if it can cache the error result and make the next MPI API call return an error so that the application could clean itself up (including the other processes).<br><br>This was on 2.3.5, but 2.3.6 looks the same in these respects.<div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><br>.. Lana (<a href="mailto:lana.deere@gmail.com" target="_blank">lana.deere@gmail.com</a>)<br><br><br></div></div></div>