]> prime8.dev >> repos - ttyd.git/commitdiff
Fix for upgrade of libwebsockets 3.2.0, it removes the poll which breaks every second...
authorideal <idealities@gmail.com>
Sat, 14 Sep 2019 10:06:18 +0000 (18:06 +0800)
committerShuanglei Tao <tsl0922@gmail.com>
Sat, 14 Sep 2019 11:53:54 +0000 (19:53 +0800)
Reference:
[1] https://github.com/warmcat/libwebsockets/issues/1685
[2] https://libwebsockets.org/git/libwebsockets/tree/READMEs/README.lws_sul.md

src/protocol.c
src/server.c
src/server.h

index 933e1eba7f52b5b20cca88d1921c3a07dba37a37..f8371831a735f9739b312383506cdb62bc4ad179 100644 (file)
@@ -161,10 +161,24 @@ cleanup:
 
     pthread_mutex_destroy(&client->mutex);
 
+#if LWS_LIBRARY_VERSION_NUMBER >= 3002000
+    lws_sul_schedule(context, 0, &client->sul_stagger, NULL, LWS_SET_TIMER_USEC_CANCEL);
+#endif
+
     // remove from client list
     tty_client_remove(client);
 }
 
+#if LWS_LIBRARY_VERSION_NUMBER >= 3002000
+void
+stagger_callback(lws_sorted_usec_list_t *sul) {
+    struct tty_client *client = lws_container_of(sul, struct tty_client, sul_stagger);
+
+    lws_callback_on_writable(client->wsi);
+    lws_sul_schedule(context, 0, sul, stagger_callback, 10 * LWS_US_PER_MS);
+}
+#endif
+
 void *
 thread_run_command(void *args) {
     struct tty_client *client = (struct tty_client *) args;
@@ -357,6 +371,10 @@ callback_tty(struct lws *wsi, enum lws_callback_reasons reason,
             // check if there are more fragmented messages
             if (lws_remaining_packet_payload(wsi) > 0 || !lws_is_final_fragment(wsi)) {
                 return 0;
+            } else {
+                #if LWS_LIBRARY_VERSION_NUMBER >= 3002000
+                lws_sul_schedule(context, 0, &client->sul_stagger, stagger_callback, 10);
+                #endif
             }
 
             switch (command) {
index 7afa467aabdedc1f19bcf19f74799f8d1038b86b..8e1855b89e82b859cfc29fddf8a3e813a9e6e38a 100644 (file)
 #define TTYD_VERSION "unknown"
 #endif
 
-#if LWS_LIBRARY_VERSION_NUMBER == 3002000
-#error "libwebsockets 3.2.0 is not compatible with ttyd."
-#endif
-
 volatile bool force_exit = false;
 struct lws_context *context;
 struct tty_server *server;
@@ -497,6 +493,9 @@ main(int argc, char **argv) {
         }
         pthread_mutex_unlock(&server->mutex);
         lws_service(context, 10);
+#if LWS_LIBRARY_VERSION_NUMBER >= 3002000
+        usleep(10 * LWS_US_PER_MS);
+#endif
     }
 
     lws_context_destroy(context);
index 34938397be763fc864793c97b3de4b019782e757..43a2327e59e95b92766a9892a73c59cfd64fd02f 100644 (file)
@@ -36,6 +36,9 @@ struct tty_client {
     int argc;
 
     struct lws *wsi;
+#if LWS_LIBRARY_VERSION_NUMBER >= 3002000
+    lws_sorted_usec_list_t sul_stagger;
+#endif
     struct winsize size;
     char *buffer;
     size_t len;