From e79ecf549acae3020fb9f225c16315e45fb4b7c5 Mon Sep 17 00:00:00 2001 From: Anatolii Kurotych <akurotych@gmail.com> Date: Mon, 28 Jan 2019 13:52:28 +0200 Subject: [PATCH] [*] Remove abort. Fix crash --- core/dap_circular_buffer.c | 18 ++++++++++++++---- core/dap_circular_buffer.h | 2 +- test/libdap-test | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/core/dap_circular_buffer.c b/core/dap_circular_buffer.c index fba6592..adb4aa2 100755 --- a/core/dap_circular_buffer.c +++ b/core/dap_circular_buffer.c @@ -62,13 +62,13 @@ size_t circular_buffer_get_data_size(circular_buffer_t cBuf) return cBuf->dataSize; } -void circular_buffer_push(circular_buffer_t cBuf,void *src, size_t length) +void circular_buffer_push(circular_buffer_t cBuf, const void *src, size_t length) { if(length == 0) return; size_t writableLen = length; - void *pSrc = src; + const void *pSrc = src; if(writableLen > cBuf->capacity)//in case of size overflow { @@ -164,8 +164,18 @@ int circular_buffer_write_In_socket(circular_buffer_t cBuf, int sockfd) { if(cBuf->headOffset + cBuf->dataSize <= cBuf->capacity) { - log_it(L_CRITICAL, "We always trying write all data!"); - abort(); + rdLen = send(sockfd, + &cBuf->buffer[cBuf->headOffset], + cBuf->dataSize, MSG_DONTWAIT | MSG_NOSIGNAL); + + if(rdLen < 0) { + log_it(L_ERROR, "Can't write data in socket. %s", strerror(errno)); + return -1; + } + + cBuf->headOffset += rdLen; + if(cBuf->headOffset == cBuf->capacity) + cBuf->headOffset = 0; } else { diff --git a/core/dap_circular_buffer.h b/core/dap_circular_buffer.h index 5a59da7..ed7a1fa 100755 --- a/core/dap_circular_buffer.h +++ b/core/dap_circular_buffer.h @@ -34,7 +34,7 @@ extern size_t circular_buffer_get_capacity(circular_buffer_t cBuf); extern size_t circular_buffer_get_data_size(circular_buffer_t cBuf); // Push data to the tail of a circular buffer from 'src' with 'length' size in byte. -extern void circular_buffer_push(circular_buffer_t cBuf,void *src, size_t length); +extern void circular_buffer_push(circular_buffer_t cBuf, const void *src, size_t length); // Pop data from a circular buffer to 'dataOut' with wished 'length' size in byte,return the actual data size in byte popped out,which is less or equal to the input 'length parameter. extern size_t circular_buffer_pop(circular_buffer_t cBuf, size_t length, void *dataOut); diff --git a/test/libdap-test b/test/libdap-test index d225778..d40ba89 160000 --- a/test/libdap-test +++ b/test/libdap-test @@ -1 +1 @@ -Subproject commit d2257789e0c796a5a3b637e14dcbaf8a8c7880cc +Subproject commit d40ba8973440b7c712d5a64df03a312adcf7c2fd -- GitLab