aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhanlin <hanlin_wang@163.com>2019-12-30 16:25:20 +0800
committerFlorin Coras <florin.coras@gmail.com>2019-12-30 17:26:18 +0000
commit9f3f18f99fd321cdcfc331e92b10b64f0ef590b3 (patch)
tree97107dfd78dae3415407e08cdc19bf8105c8dffb
parentb7f035ff4c56cbfd8548c8f1a27fcffb79be6d1f (diff)
vcl: hold errno when calling LDBG
Type: fix Call trace of LDBG: LDBG->clib_warning->_clib_error->dispatch_message->os_puts->writev However, writev will hijacked by LDP, and then execute following code: if ((errno = -ldp_init ())) return -1; Now, errno will be set. Because we always call LDBG just before return from ldp_accept4, listen, and etc. So errno will be overwritted after LDBG called. Signed-off-by: hanlin <hanlin_wang@163.com> Change-Id: I7a90f3a14772994f11f09650481411796e3f5630
-rw-r--r--src/vcl/ldp.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/vcl/ldp.c b/src/vcl/ldp.c
index e53a61e8e8c..34eba377451 100644
--- a/src/vcl/ldp.c
+++ b/src/vcl/ldp.c
@@ -109,7 +109,11 @@ typedef struct
#define LDBG(_lvl, _fmt, _args...) \
if (ldp->debug > _lvl) \
- clib_warning ("ldp<%d>: " _fmt, getpid(), ##_args)
+ { \
+ int errno_saved = errno; \
+ clib_warning ("ldp<%d>: " _fmt, getpid(), ##_args); \
+ errno = errno_saved; \
+ }
static ldp_main_t ldp_main = {
.vlsh_bit_val = (1 << LDP_SID_BIT_MIN),