From 40ab4a8d3dd53a3e6e283bab81b629ec95056f57 Mon Sep 17 00:00:00 2001
From: Sergey Lyubka <valenok@gmail.com>
Date: Sun, 29 Sep 2013 22:43:58 +0100
Subject: [PATCH] Fixed websocket example logic when freeing the message,
 again!

---
 examples/websocket.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/examples/websocket.c b/examples/websocket.c
index 602e687e3..5fbf5005f 100644
--- a/examples/websocket.c
+++ b/examples/websocket.c
@@ -19,7 +19,7 @@ static int event_handler(struct mg_event *event) {
       } else {
         static const char *server_ready_message = "server ready";
         char *data;
-        int bits, len;
+        int bits, len, must_exit = 0;
 
         // Handshake, and send initial server message
         mg_websocket_handshake(event->conn);
@@ -27,17 +27,21 @@ static int event_handler(struct mg_event *event) {
                            server_ready_message, strlen(server_ready_message));
 
         // Read messages sent by client. Echo them back.
-        while ((len = mg_websocket_read(event->conn, &bits, &data)) > 0) {
+        while (must_exit == 0 &&
+               (len = mg_websocket_read(event->conn, &bits, &data)) > 0) {
+
           printf("got message: [%.*s]\n", len, data);
           mg_websocket_write(event->conn, WEBSOCKET_OPCODE_TEXT, data, len);
-          free(data); // It's our responsibility to free allocated message
 
           // If the message is "exit", close the connection, exit the loop
           if (memcmp(data, "exit", 4) == 0) {
             mg_websocket_write(event->conn,
                                WEBSOCKET_OPCODE_CONNECTION_CLOSE, "", 0);
-            break;
+            must_exit = 1;
           }
+
+          // It's our responsibility to free allocated message
+          free(data);
         }
       }
       return 1;
-- 
GitLab