session: avoid vpp deadlock due to app crash 43/33243/1
authorliuyacan <liuyacan@corp.netease.com>
Sat, 24 Jul 2021 06:30:51 +0000 (14:30 +0800)
committerliuyacan <liuyacan@corp.netease.com>
Sat, 24 Jul 2021 06:50:07 +0000 (14:50 +0800)
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 <liuyacan@corp.netease.com>
Change-Id: I2b2bf2b272c5b3ca7e4a56af179af12bbcde149d

src/vnet/session/session_api.c

index 7e7cffb..00e67dc 100644 (file)
@@ -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);
     }