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