diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index 3f406c2ee329d3aa107d912c8f32d40f645e3df3..317a73883a7b5c559f70364417760fe6bb9097eb 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -235,6 +235,7 @@ just_kill_connection:
 			lws_free2(wsi->u.ws.ping_payload_buf);
 			wsi->u.ws.ping_payload_alloc = 0;
 			wsi->u.ws.ping_payload_len = 0;
+			wsi->u.ws.ping_pending_flag = 0;
 		}
 	}
 
diff --git a/lib/parsers.c b/lib/parsers.c
index 6a0fe09305d5734726ebc05fab7c88894d405a4f..2ee4e7b657ec622211be80f7f572cff5dfc60536 100644
--- a/lib/parsers.c
+++ b/lib/parsers.c
@@ -876,7 +876,7 @@ spill:
 			lwsl_info("received %d byte ping, sending pong\n",
 						 wsi->u.ws.rx_user_buffer_head);
 
-			if (wsi->u.ws.ping_payload_len) {
+			if (wsi->u.ws.ping_pending_flag) {
 				/* 
 				 * there is already a pending ping payload
 				 * we should just log and drop
@@ -910,6 +910,7 @@ spill:
 				wsi->u.ws.rx_user_buffer_head);
 			
 			wsi->u.ws.ping_payload_len = wsi->u.ws.rx_user_buffer_head;
+			wsi->u.ws.ping_pending_flag = 1;
 			
 			/* get it sent as soon as possible */
 			libwebsocket_callback_on_writable(wsi->protocol->owning_server, wsi);
diff --git a/lib/private-libwebsockets.h b/lib/private-libwebsockets.h
index 5e0a6a3232612bb4d8d483ec6394c49ef0cdeddb..5e73dff3b624b882c2a237fc4b32de7dc419d4ab 100644
--- a/lib/private-libwebsockets.h
+++ b/lib/private-libwebsockets.h
@@ -794,7 +794,8 @@ struct _lws_websocket_related {
 
 	unsigned char *ping_payload_buf; /* non-NULL if malloc'd */
 	unsigned int ping_payload_alloc; /* length malloc'd */
-	unsigned int ping_payload_len; /* nonzero if PONG pending */
+	unsigned int ping_payload_len;
+	unsigned char ping_pending_flag;
 };
 
 struct libwebsocket {
diff --git a/lib/service.c b/lib/service.c
index bf968b770708fc62f64c69d309346a16d183ed0d..a94e6793d15926d3d43ef54feb7048bceafc6d4e 100644
--- a/lib/service.c
+++ b/lib/service.c
@@ -92,7 +92,8 @@ lws_handle_POLLOUT_event(struct libwebsocket_context *context,
 #endif
 	/* pending control packets have next priority */
 	
-	if (wsi->state == WSI_STATE_ESTABLISHED && wsi->u.ws.ping_payload_len) {
+	if (wsi->state == WSI_STATE_ESTABLISHED &&
+	    wsi->u.ws.ping_pending_flag) {
 		n = libwebsocket_write(wsi, 
 				&wsi->u.ws.ping_payload_buf[
 					LWS_SEND_BUFFER_PRE_PADDING],
@@ -101,7 +102,7 @@ lws_handle_POLLOUT_event(struct libwebsocket_context *context,
 		if (n < 0)
 			return -1;
 		/* well he is sent, mark him done */
-		wsi->u.ws.ping_payload_len = 0;
+		wsi->u.ws.ping_pending_flag = 0;
 		/* leave POLLOUT active either way */
 		return 0;
 	}