void CloudPinyinProcessEvent(void* arg) { FcitxCloudPinyin* cloudpinyin = (FcitxCloudPinyin*) arg; char c; while (read(cloudpinyin->pipeRecv, &c, sizeof(char)) > 0); pthread_mutex_lock(&cloudpinyin->finishQueueLock); CurlQueue* queue; queue = cloudpinyin->finishQueue; while (queue->next != NULL) { CurlQueue* pivot = queue->next; queue->next = queue->next->next; CloudPinyinHandleRequest(cloudpinyin, pivot); } pthread_mutex_unlock(&cloudpinyin->finishQueueLock); }
void CloudPinyinProcessEvent(void* arg) { FcitxCloudPinyin* cloudpinyin = (FcitxCloudPinyin*) arg; FcitxInstance* instance = cloudpinyin->owner; if (!FD_ISSET(cloudpinyin->pipeRecv, FcitxInstanceGetReadFDSet(instance))) return; char c; while (read(cloudpinyin->pipeRecv, &c, sizeof(char)) > 0); pthread_mutex_lock(&cloudpinyin->finishQueueLock); CurlQueue* queue; queue = cloudpinyin->finishQueue; /* this queue header is empty, so the check condition is "next" not null */ while (queue->next != NULL) { /* remove pivot from queue, thus pivot need to be free'd in HandleRequest */ CurlQueue* pivot = queue->next; queue->next = queue->next->next; CloudPinyinHandleRequest(cloudpinyin, pivot); } pthread_mutex_unlock(&cloudpinyin->finishQueueLock); }