implement UiMessageHandler output thread

Sun, 30 Nov 2025 21:22:57 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 30 Nov 2025 21:22:57 +0100
changeset 945
6055c7c677cf
parent 944
cc23aad6335e
child 946
081651de86a3

implement UiMessageHandler output thread

ui/common/message.c file | annotate | diff | comparison | revisions
--- a/ui/common/message.c	Sun Nov 30 21:12:00 2025 +0100
+++ b/ui/common/message.c	Sun Nov 30 21:22:57 2025 +0100
@@ -169,6 +169,34 @@
 
 void* uic_simple_msg_handler_out_thread(void *data) {
     UiSimpleMessageHandler *handler = data;
+    CxBuffer *buffer = handler->outbuf;
+    
+    pthread_mutex_lock(&handler->queue_lock);
+    
+    for(;;) {
+        if(buffer->pos == 0) {
+            pthread_cond_wait(&handler->available, &handler->queue_lock);
+            continue;
+        } else {
+            size_t n = buffer->pos;
+            size_t pos = 0;
+            while(n > 0) {
+                ssize_t w = write(handler->out, buffer->space + pos, n);
+                if(w <= 0) {
+                    fprintf(stderr, "Error: output error\n");
+                    break;
+                }
+                n -= w;
+                pos += w;
+            }
+            if(n > 0) {
+                break; // error
+            }
+            buffer->pos = 0;
+        }
+    }
+    
+    pthread_mutex_unlock(&handler->queue_lock);
     
     return NULL;
 }

mercurial