vcl: fix event triggered after closing connections. 00/34300/4
authorliuyacan <liuyacan@corp.netease.com>
Mon, 1 Nov 2021 02:22:09 +0000 (10:22 +0800)
committerFlorin Coras <florin.coras@gmail.com>
Wed, 3 Nov 2021 14:50:06 +0000 (14:50 +0000)
Improve the accuracy of epoll event(EPOLLRDHUP).

Type: fix

Signed-off-by: liuyacan <liuyacan@corp.netease.com>
Change-Id: Ia31e696a0666c417ca99e684c6a4515f1cafc646

src/vcl/vppcom.c

index b91c3a3..9f8edce 100644 (file)
@@ -3089,8 +3089,22 @@ vcl_epoll_wait_handle_mq_event (vcl_worker_t * wrk, session_event_t * e,
       sid = s->session_index;
       session_events = s->vep.ev.events;
       add_event = 1;
-      events[*num_ev].events = EPOLLHUP | EPOLLRDHUP;
+      if (EPOLLRDHUP & session_events)
+       {
+         /* If app can distinguish between RDHUP and HUP,
+          * we make finer control */
+         events[*num_ev].events = EPOLLRDHUP;
+         if (s->flags & VCL_SESSION_F_WR_SHUTDOWN)
+           {
+             events[*num_ev].events |= EPOLLHUP;
+           }
+       }
+      else
+       {
+         events[*num_ev].events = EPOLLHUP;
+       }
       session_evt_data = s->vep.ev.data.u64;
+
       break;
     case SESSION_CTRL_EVT_RESET:
       if (!e->postponed)