Remove decoding thread like in Java common

This commit is contained in:
Cameron Gutman
2014-06-29 00:24:25 -07:00
parent 97710478de
commit 50733f6d7a
6 changed files with 51 additions and 30 deletions
+34 -2
View File
@@ -71,6 +71,38 @@ int LbqOfferQueueItem(PLINKED_BLOCKING_QUEUE queueHead, void* data) {
return LBQ_SUCCESS;
}
int LbqPollQueueElement(PLINKED_BLOCKING_QUEUE queueHead, void** data) {
PLINKED_BLOCKING_QUEUE_ENTRY entry;
PltLockMutex(&queueHead->mutex);
if (queueHead->head == NULL) {
PltUnlockMutex(&queueHead->mutex);
return LBQ_EMPTY;
}
entry = queueHead->head;
queueHead->head = entry->flink;
queueHead->currentSize--;
if (queueHead->head == NULL) {
LC_ASSERT(queueHead->currentSize == 0);
queueHead->tail = NULL;
PltClearEvent(&queueHead->containsDataEvent);
}
else {
LC_ASSERT(queueHead->currentSize != 0);
queueHead->head->blink = NULL;
}
PltUnlockMutex(&queueHead->mutex);
*data = entry->data;
free(entry);
return LBQ_SUCCESS;
}
int LbqWaitForQueueElement(PLINKED_BLOCKING_QUEUE queueHead, void** data) {
PLINKED_BLOCKING_QUEUE_ENTRY entry;
int err;
@@ -101,12 +133,12 @@ int LbqWaitForQueueElement(PLINKED_BLOCKING_QUEUE queueHead, void** data) {
queueHead->head->blink = NULL;
}
PltUnlockMutex(&queueHead->mutex);
*data = entry->data;
free(entry);
PltUnlockMutex(&queueHead->mutex);
break;
}