diff --git a/CMakeLists.txt b/CMakeLists.txt index 745cef713..2e890aabf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -327,7 +327,7 @@ set(PACKAGE "libwebsockets") set(CPACK_PACKAGE_NAME "${PACKAGE}") set(CPACK_PACKAGE_VERSION_MAJOR "4") set(CPACK_PACKAGE_VERSION_MINOR "0") -set(CPACK_PACKAGE_VERSION_PATCH "16") +set(CPACK_PACKAGE_VERSION_PATCH "17") set(CPACK_PACKAGE_RELEASE 1) set(CPACK_GENERATOR "RPM") set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") diff --git a/lib/event-libs/libevent/libevent.c b/lib/event-libs/libevent/libevent.c index f64a0f9d1..6475d1279 100644 --- a/lib/event-libs/libevent/libevent.c +++ b/lib/event-libs/libevent/libevent.c @@ -197,6 +197,7 @@ elops_init_pt_event(struct lws_context *context, void *_loop, int tsi) (EV_READ | EV_PERSIST), lws_event_cb, &vh->lserv_wsi->w_read); event_add(vh->lserv_wsi->w_read.event.watcher, NULL); + vh->lserv_wsi->w_read.event.set = 1; } vh = vh->vhost_next; } @@ -274,17 +275,25 @@ elops_io_event(struct lws *wsi, int flags) (flags & (LWS_EV_READ | LWS_EV_WRITE))); if (flags & LWS_EV_START) { - if (flags & LWS_EV_WRITE) + if ((flags & LWS_EV_WRITE) && !wsi->w_write.event.set) { event_add(wsi->w_write.event.watcher, NULL); + wsi->w_write.event.set = 1; + } - if (flags & LWS_EV_READ) + if ((flags & LWS_EV_READ) && !wsi->w_read.event.set) { event_add(wsi->w_read.event.watcher, NULL); + wsi->w_read.event.set = 1; + } } else { - if (flags & LWS_EV_WRITE) + if ((flags & LWS_EV_WRITE) && wsi->w_write.event.set) { event_del(wsi->w_write.event.watcher); + wsi->w_write.event.set = 0; + } - if (flags & LWS_EV_READ) + if ((flags & LWS_EV_READ) && wsi->w_read.event.set) { event_del(wsi->w_read.event.watcher); + wsi->w_read.event.set = 0; + } } } diff --git a/lib/event-libs/libevent/private-lib-event-libs-libevent.h b/lib/event-libs/libevent/private-lib-event-libs-libevent.h index 6d0029548..9bc8e6841 100644 --- a/lib/event-libs/libevent/private-lib-event-libs-libevent.h +++ b/lib/event-libs/libevent/private-lib-event-libs-libevent.h @@ -32,6 +32,7 @@ struct lws_pt_eventlibs_libevent { struct lws_io_watcher_libevent { struct event *watcher; + char set; }; struct lws_signal_watcher_libevent {