Browse Source

optimize: avoid to trigger on_close if not set onclose

ithewei 9 months ago
parent
commit
41c63bfbf0
2 changed files with 7 additions and 2 deletions
  1. 3 2
      event/hevent.c
  2. 4 0
      evpp/Channel.h

+ 3 - 2
event/hevent.c

@@ -428,9 +428,10 @@ void hio_write_cb(hio_t* io, const void* buf, int len) {
 void hio_close_cb(hio_t* io) {
     io->connected = 0;
     io->closed = 1;
-    if (io->close_cb) {
+    hclose_cb close_cb = io->close_cb;
+    if (close_cb) {
         // printd("close_cb------\n");
-        io->close_cb(io);
+        close_cb(io);
         // printd("close_cb======\n");
     }
 }

+ 4 - 0
evpp/Channel.h

@@ -180,6 +180,10 @@ public:
     int close(bool async = false) {
         if (isClosed()) return -1;
         status = CLOSED;
+        // NOTE: avoid to trigger on_close if not set onclose
+        if (onclose == NULL && hio_getcb_close(io_) == on_close) {
+            hio_setcb_close(io_, NULL);
+        }
         return async ? hio_close_async(io_) : hio_close(io_);
     }