Sun, 30 Nov 2025 21:22:57 +0100
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; }