From fa216849e5a7c9d6560150610c4163e7efb58d9d Mon Sep 17 00:00:00 2001
From: Sergey Lyubka <valenok@gmail.com>
Date: Sat, 4 Jan 2014 22:17:16 +0000
Subject: [PATCH] Resetting connection flags in close_local_endpoint()

---
 mongoose.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/mongoose.c b/mongoose.c
index f4b4306f7..d718ec497 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -1900,6 +1900,10 @@ static int find_index_file(struct connection *conn, char *path,
   return found;
 }
 
+static void write_terminating_chunk(struct connection *conn) {
+  mg_write(&conn->mg_conn, "0\r\n\r\n", 5);
+}
+
 static void call_uri_handler_if_data_is_buffered(struct connection *conn) {
   struct iobuf *loc = &conn->local_iobuf;
   struct mg_connection *c = &conn->mg_conn;
@@ -1913,7 +1917,7 @@ static void call_uri_handler_if_data_is_buffered(struct connection *conn) {
     if (loc->len >= c->content_len) {
     conn->endpoint.uh->handler(c);
     if (conn->flags & CONN_HEADERS_SENT) {
-      write_chunk(conn, "", 0);  // Write final zero-length chunk
+      write_terminating_chunk(conn);
     }
     close_local_endpoint(conn);
   }
@@ -2187,7 +2191,7 @@ static void send_directory_listing(struct connection *conn, const char *dir) {
   }
   free(arr);
 
-  write_chunk(conn, "", 0);  // Write final zero-length chunk
+  write_terminating_chunk(conn);
   close_local_endpoint(conn);
 }
 #endif  // NO_DIRECTORY_LISTING
@@ -3294,6 +3298,7 @@ static void close_local_endpoint(struct connection *conn) {
 #endif
 
   conn->endpoint_type = EP_NONE;
+  conn->flags = 0;
   conn->cl = conn->num_bytes_sent = conn->request_len = 0;
   free(conn->request);
   conn->request = NULL;
-- 
GitLab