From 495dfb24b732bf74b85119c0a081bff83d06a3f1 Mon Sep 17 00:00:00 2001
From: Joshua Colp <jcolp@digium.com>
Date: Thu, 13 Aug 2015 07:26:51 -0300
Subject: [PATCH] res_http_websocket: When shutting down a session don't close
 closed socket

Due to the use of ast_websocket_close in session termination it is
possible for the underlying socket to already be closed when the
session is terminated. This occurs when the close frame is attempted
to be written out but fails.

Change-Id: I7572583529a42a7dc911ea77a974d8307d5c0c8b
---
 res/res_http_websocket.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/res/res_http_websocket.c b/res/res_http_websocket.c
index 956ed0a516..a29daa8ffa 100644
--- a/res/res_http_websocket.c
+++ b/res/res_http_websocket.c
@@ -169,9 +169,11 @@ static void session_destroy_fn(void *obj)
 
 	if (session->f) {
 		ast_websocket_close(session, 0);
-		fclose(session->f);
-		ast_verb(2, "WebSocket connection %s '%s' closed\n", session->client ? "to" : "from",
-			ast_sockaddr_stringify(&session->address));
+		if (session->f) {
+			fclose(session->f);
+			ast_verb(2, "WebSocket connection %s '%s' closed\n", session->client ? "to" : "from",
+				ast_sockaddr_stringify(&session->address));
+		}
 	}
 
 	ao2_cleanup(session->client);
-- 
GitLab