瀏覽代碼

websocket: ignore keepalive in state WS_S_REMOVING

- GH #3331
Daniel-Constantin Mierla 2 年之前
父節點
當前提交
34c3c42b7f
共有 1 個文件被更改,包括 10 次插入5 次删除
  1. 10 5
      src/modules/websocket/ws_frame.c

+ 10 - 5
src/modules/websocket/ws_frame.c

@@ -809,13 +809,18 @@ void ws_keepalive(unsigned int ticks, void *param)
 				LM_WARN("forcibly closing connection\n");
 				wsconn_close_now(wsc);
 			} else if (ws_keepalive_mechanism == KEEPALIVE_MECHANISM_CONCHECK) {
-				tcp_connection_t *con = tcpconn_get(wsc->id, 0, 0, 0, 0);
-				if(con==NULL) {
-					LM_INFO("tcp connection has been lost (id: %d wsc: %p)\n",
+				if(wsc->state == WS_S_REMOVING) {
+					LM_DBG("ws (id: %d wsc: %p) in removing state ignoring keepalive\n",
 							wsc->id, wsc);
-					wsc->state = WS_S_CLOSING;
 				} else {
-					tcpconn_put(con);
+					tcp_connection_t *con = tcpconn_get(wsc->id, 0, 0, 0, 0);
+					if(con==NULL) {
+						LM_INFO("tcp connection has been lost (id: %d wsc: %p)\n",
+								wsc->id, wsc);
+						wsc->state = WS_S_CLOSING;
+					} else {
+						tcpconn_put(con);
+					}
 				}
 			} else {
 				int opcode = (ws_keepalive_mechanism == KEEPALIVE_MECHANISM_PING)