diff --git a/lib/client-handshake.c b/lib/client-handshake.c index 83bcef29..03488f22 100644 --- a/lib/client-handshake.c +++ b/lib/client-handshake.c @@ -234,9 +234,6 @@ lws_client_connect_2(struct lws *wsi) if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) goto failed; - lws_libev_io(wsi, LWS_EV_START | LWS_EV_WRITE); - lws_libuv_io(wsi, LWS_EV_START | LWS_EV_WRITE); - return wsi; } diff --git a/lib/client.c b/lib/client.c index ad15ed0a..fd9fb578 100644 --- a/lib/client.c +++ b/lib/client.c @@ -145,9 +145,6 @@ lws_client_socket_service(struct lws_context *context, struct lws *wsi, if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) return -1; - lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_WRITE); - lws_libuv_io(wsi, LWS_EV_STOP | LWS_EV_WRITE); - #ifdef LWS_OPENSSL_SUPPORT /* we can retry this... just cook the SSL BIO the first time */ diff --git a/lib/pollfd.c b/lib/pollfd.c index 0b0dece1..48e12df9 100644 --- a/lib/pollfd.c +++ b/lib/pollfd.c @@ -49,6 +49,23 @@ _lws_change_pollfd(struct lws *wsi, int _and, int _or, struct lws_pollargs *pa) goto bail; } + if (_and & LWS_POLLIN) { + lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_READ); + lws_libuv_io(wsi, LWS_EV_STOP | LWS_EV_READ); + } + if (_or & LWS_POLLIN) { + lws_libev_io(wsi, LWS_EV_START | LWS_EV_READ); + lws_libuv_io(wsi, LWS_EV_START | LWS_EV_READ); + } + if (_and & LWS_POLLOUT) { + lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_WRITE); + lws_libuv_io(wsi, LWS_EV_STOP | LWS_EV_WRITE); + } + if (_or & LWS_POLLOUT) { + lws_libev_io(wsi, LWS_EV_START | LWS_EV_WRITE); + lws_libuv_io(wsi, LWS_EV_START | LWS_EV_WRITE); + } + /* * if we changed something in this pollfd... * ... and we're running in a different thread context @@ -315,9 +332,6 @@ network_sock: if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) return -1; - lws_libev_io(wsi, LWS_EV_START | LWS_EV_WRITE); - lws_libuv_io(wsi, LWS_EV_START | LWS_EV_WRITE); - return 1; } diff --git a/lib/server.c b/lib/server.c index aa69f680..6984fe90 100644 --- a/lib/server.c +++ b/lib/server.c @@ -901,9 +901,6 @@ try_pollout: goto fail; } - lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_WRITE); - lws_libuv_io(wsi, LWS_EV_STOP | LWS_EV_WRITE); - if (wsi->state != LWSS_HTTP_ISSUING_FILE) { n = user_callback_handle_rxflow(wsi->protocol->callback, wsi, LWS_CALLBACK_HTTP_WRITEABLE, diff --git a/lib/service.c b/lib/service.c index a71d20e4..2e4570fd 100644 --- a/lib/service.c +++ b/lib/service.c @@ -231,16 +231,12 @@ lws_handle_POLLOUT_event(struct lws *wsi, struct lws_pollfd *pollfd) user_service: /* one shot */ - if (pollfd) { + if (pollfd) if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) { lwsl_info("failed at set pollfd\n"); return 1; } - lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_WRITE); - lws_libuv_io(wsi, LWS_EV_STOP | LWS_EV_WRITE); - } - #ifdef LWS_USE_HTTP2 /* * we are the 'network wsi' for potentially many muxed child wsi with diff --git a/lib/ssl.c b/lib/ssl.c index 5a60a4e5..0f15d7d7 100644 --- a/lib/ssl.c +++ b/lib/ssl.c @@ -664,9 +664,6 @@ lws_server_socket_service_ssl(struct lws *wsi, lws_sockfd_type accept_fd) if (lws_change_pollfd(wsi, LWS_POLLOUT, 0)) goto fail; - lws_libev_io(wsi, LWS_EV_STOP | LWS_EV_WRITE); - lws_libuv_io(wsi, LWS_EV_STOP | LWS_EV_WRITE); - lws_latency_pre(context, wsi); n = recv(wsi->sock, (char *)pt->serv_buf, LWS_MAX_SOCKET_IO_BUF, @@ -733,9 +730,6 @@ go_again: if (lws_change_pollfd(wsi, 0, LWS_POLLIN)) goto fail; - lws_libev_io(wsi, LWS_EV_START | LWS_EV_READ); - lws_libuv_io(wsi, LWS_EV_START | LWS_EV_READ); - lwsl_info("SSL_ERROR_WANT_READ\n"); break; } @@ -743,8 +737,6 @@ go_again: if (lws_change_pollfd(wsi, 0, LWS_POLLOUT)) goto fail; - lws_libev_io(wsi, LWS_EV_START | LWS_EV_WRITE); - lws_libuv_io(wsi, LWS_EV_START | LWS_EV_WRITE); break; } lwsl_debug("SSL_accept failed skt %u: %s\n",