> #0  0x0000003a6ce09172 in pthread_spin_lock () from 
 > /lib64/tls/libpthread.so.0
 > #1  0x0000002a959cf449 in mthca_cq_clean (cq=0x607240, qpn=3277830, srq=0x0) 
 > at src/cq.c:554
 > #2  0x0000002a959d28b9 in mthca_destroy_qp (qp=0x607400) at src/mthca.h:246
 > #3  0x000000000040117b in client_sig_handler ()
 > #4  <signal handler called>
 > #5  0x0000003a6ce09165 in pthread_spin_lock () from 
 > /lib64/tls/libpthread.so.0
 > #6  0x0000002a959cec91 in mthca_poll_cq (ibcq=0x607240, ne=1, 
 > wc=0x7fbffff590) at src/cq.c:467
 > #7  0x0000002a9557bf73 in ibv_poll_cq (cq=0x607240, num_entries=1, 
 > wc=0x7fbffff590) at /usr/local/ofed/include/infiniband/verbs.h:824

I guess my first reaction is "don't do that."  Trying to do something
as complex as destroying a QP from a signal handler seems very fragile
to me, and I wouldn't consider ibv_destroy_qp() safe to call from a
signal handler.

Can you just have your signal handler set a flag instead, and check
the flag from the normal flow of your program?

 > Does destroy_qp needs to be dependent on the CQ?

Yes, it needs to lock the CQ to get rid of stale completions for the
QP being destroyed.

 - R.

_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to