summaryrefslogtreecommitdiff
path: root/res/res_http_websocket.c
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2015-08-13 07:26:51 -0300
committerJoshua Colp <jcolp@digium.com>2015-08-13 05:36:24 -0500
commite18c300550453df06507e32c4bc78ef91d369f27 (patch)
treeda5b58d0a5aee752266962240cb04a6364a67c5e /res/res_http_websocket.c
parent0bc6fe6f7d2fdc994a5ed359c1a067ebb5d8e09d (diff)
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
Diffstat (limited to 'res/res_http_websocket.c')
-rw-r--r--res/res_http_websocket.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/res/res_http_websocket.c b/res/res_http_websocket.c
index ea3e959d9..c2d1b1850 100644
--- a/res/res_http_websocket.c
+++ b/res/res_http_websocket.c
@@ -167,9 +167,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);