1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-09 00:00:04 +01:00

libevent: enforce no event state duplication

https://github.com/warmcat/libwebsockets/issues/1956
This commit is contained in:
Andy Green 2020-06-19 19:54:17 +01:00
parent c2609f6d7b
commit 43ba4e4ef5
2 changed files with 14 additions and 4 deletions

View file

@ -200,6 +200,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;
}
@ -277,17 +278,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;
}
}
}

View file

@ -32,6 +32,7 @@ struct lws_pt_eventlibs_libevent {
struct lws_io_watcher_libevent {
struct event *watcher;
char set;
};
struct lws_signal_watcher_libevent {