From ab63223482e80c5901dbf418eb2bdd2180c8d794 Mon Sep 17 00:00:00 2001 From: Mupceet Date: Thu, 14 Jul 2022 09:52:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96loop=E8=B0=83=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mupceet --- services/loopevent/task/le_asynctask.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/services/loopevent/task/le_asynctask.c b/services/loopevent/task/le_asynctask.c index 8510a32a..9ebadfba 100644 --- a/services/loopevent/task/le_asynctask.c +++ b/services/loopevent/task/le_asynctask.c @@ -22,15 +22,28 @@ static void DoAsyncEvent_(const LoopHandle loopHandle, AsyncEventTask *asyncTask) { LE_CHECK(loopHandle != NULL && asyncTask != NULL, return, "Invalid parameters"); - LE_Buffer *buffer = GetFirstBuffer(&asyncTask->stream); - while (buffer != NULL) { + ListNode tmpHdr; + OH_ListInit(&tmpHdr); + StreamTask *task = &asyncTask->stream; + LoopMutexLock(&task->mutex); + tmpHdr.next = task->buffHead.next; + tmpHdr.prev = task->buffHead.prev; + task->buffHead.next->prev = &tmpHdr; + task->buffHead.prev->next = &tmpHdr; + OH_ListInit(&task->buffHead); + LoopMutexUnlock(&task->mutex); + + ListNode *node = tmpHdr.next; + while (node != &tmpHdr) { + LE_Buffer *buffer = ListEntry(node, LE_Buffer, node); uint64_t eventId = *(uint64_t*)(buffer->data); if (asyncTask->processAsyncEvent) { asyncTask->processAsyncEvent((TaskHandle)asyncTask, eventId, (uint8_t *)(buffer->data + sizeof(uint64_t)), buffer->dataSize); } - FreeBuffer(loopHandle, &asyncTask->stream, buffer); - buffer = GetFirstBuffer(&asyncTask->stream); + OH_ListRemove(&buffer->node); + free(buffer); + node = tmpHdr.next; } } #ifdef STARTUP_INIT_TEST -- GitLab