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

---
 examples/websocket.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/examples/websocket.c b/examples/websocket.c
index 4451969b5..602e687e3 100644
--- a/examples/websocket.c
+++ b/examples/websocket.c
@@ -3,6 +3,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include "mongoose.h"
 
 static int event_handler(struct mg_event *event) {
@@ -25,14 +26,16 @@ static int event_handler(struct mg_event *event) {
         mg_websocket_write(event->conn, WEBSOCKET_OPCODE_TEXT,
                            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) {
-          // Echo message back to the client
-          mg_websocket_write(event->conn, WEBSOCKET_OPCODE_TEXT, data, len);
           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);
-            free(data);
             break;
           }
         }
-- 
GitLab