ui/common/message.c

changeset 945
6055c7c677cf
parent 944
cc23aad6335e
child 953
c98404829cd3
equal deleted inserted replaced
944:cc23aad6335e 945:6055c7c677cf
167 return NULL; 167 return NULL;
168 } 168 }
169 169
170 void* uic_simple_msg_handler_out_thread(void *data) { 170 void* uic_simple_msg_handler_out_thread(void *data) {
171 UiSimpleMessageHandler *handler = data; 171 UiSimpleMessageHandler *handler = data;
172 CxBuffer *buffer = handler->outbuf;
173
174 pthread_mutex_lock(&handler->queue_lock);
175
176 for(;;) {
177 if(buffer->pos == 0) {
178 pthread_cond_wait(&handler->available, &handler->queue_lock);
179 continue;
180 } else {
181 size_t n = buffer->pos;
182 size_t pos = 0;
183 while(n > 0) {
184 ssize_t w = write(handler->out, buffer->space + pos, n);
185 if(w <= 0) {
186 fprintf(stderr, "Error: output error\n");
187 break;
188 }
189 n -= w;
190 pos += w;
191 }
192 if(n > 0) {
193 break; // error
194 }
195 buffer->pos = 0;
196 }
197 }
198
199 pthread_mutex_unlock(&handler->queue_lock);
172 200
173 return NULL; 201 return NULL;
174 } 202 }

mercurial