From: liuyacan Date: Sat, 24 Jul 2021 06:30:51 +0000 (+0800) Subject: session: avoid vpp deadlock due to app crash X-Git-Tag: v22.02-rc0~174 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=9609e26f8712246f62d54c1178aefce57e3b6c06;p=vpp.git session: avoid vpp deadlock due to app crash In high traffic scenarios, if app crashed or hang on somewhere, app_mq will quickly accumulate to full, after which vpp worker will try 100 times before giving up allocating slot for every msg. This will cause vpp main thread barrier sync to fail. Type: fix Signed-off-by: liuyacan Change-Id: I2b2bf2b272c5b3ca7e4a56af179af12bbcde149d --- diff --git a/src/vnet/session/session_api.c b/src/vnet/session/session_api.c index 7e7cffbbdd4..00e67dcd2d0 100644 --- a/src/vnet/session/session_api.c +++ b/src/vnet/session/session_api.c @@ -93,6 +93,12 @@ mq_try_lock_and_alloc_msg (svm_msg_q_t * app_mq, svm_msg_q_msg_t * msg) SVM_Q_NOWAIT, msg); if (!rv) return 0; + /* + * Break the loop if mq is full, usually this is because the + * app has crashed or is hanging on somewhere. + */ + if (rv != -1) + break; try++; usleep (1); }