From fc10940ec1c1e974a94eb5ed171f1aedaafef93e Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Thu, 2 Jul 2015 20:31:17 +0100 Subject: [PATCH] Attempt to fix server problems receiving large https POSTS. Without this change the pending list ends up having wsi->pending_read_list_next == wsi, which causes a loop in lws_plat_unix(). --- lib/ssl.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/ssl.c b/lib/ssl.c index f6276932f..cb0cbbfa0 100644 --- a/lib/ssl.c +++ b/lib/ssl.c @@ -438,12 +438,14 @@ lws_ssl_capable_read(struct libwebsocket_context *context, */ if (n == len && wsi->ssl && SSL_pending(wsi->ssl)) { if (!wsi->pending_read_list_next && !wsi->pending_read_list_prev) { - /* add us to the linked list of guys with pending ssl */ - if (context->pending_read_list) - context->pending_read_list->pending_read_list_prev = wsi; - wsi->pending_read_list_next = context->pending_read_list; - wsi->pending_read_list_prev = NULL; - context->pending_read_list = wsi; + if (context->pending_read_list != wsi) { + /* add us to the linked list of guys with pending ssl */ + if (context->pending_read_list) + context->pending_read_list->pending_read_list_prev = wsi; + wsi->pending_read_list_next = context->pending_read_list; + wsi->pending_read_list_prev = NULL; + context->pending_read_list = wsi; + } } } else lws_ssl_remove_wsi_from_buffered_list(context, wsi);