# HG changeset patch # User Olaf Wintermann # Date 1764534177 -3600 # Node ID 6055c7c677cf14723f32931bb76142450e853744 # Parent cc23aad6335e5a30d1f26fcea4e87b0295fc52d6 implement UiMessageHandler output thread diff -r cc23aad6335e -r 6055c7c677cf ui/common/message.c --- 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; }