summaryrefslogtreecommitdiff
path: root/lib/bt/common/osi
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bt/common/osi')
-rw-r--r--lib/bt/common/osi/allocator.c48
-rw-r--r--lib/bt/common/osi/include/osi/allocator.h49
-rw-r--r--lib/bt/common/osi/include/osi/fixed_pkt_queue.h4
-rw-r--r--lib/bt/common/osi/include/osi/hash_map.h1
-rw-r--r--lib/bt/common/osi/pkt_queue.c1
-rw-r--r--lib/bt/common/osi/thread.c4
6 files changed, 40 insertions, 67 deletions
diff --git a/lib/bt/common/osi/allocator.c b/lib/bt/common/osi/allocator.c
index 4d10e10f..86fb705b 100644
--- a/lib/bt/common/osi/allocator.c
+++ b/lib/bt/common/osi/allocator.c
@@ -213,42 +213,30 @@ char *osi_strdup(const char *str)
void *osi_malloc_func(size_t size)
{
-#if HEAP_MEMORY_DEBUG
- void *p;
-#if HEAP_ALLOCATION_FROM_SPIRAM_FIRST
- p = heap_caps_malloc_prefer(size, 2, MALLOC_CAP_DEFAULT|MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL);
-#else
- p = malloc(size);
-#endif /* #if HEAP_ALLOCATION_FROM_SPIRAM_FIRST */
- osi_mem_dbg_record(p, size, __func__, __LINE__);
+ void *p = osi_malloc_base(size);
+
+ if (size != 0 && p == NULL) {
+ OSI_TRACE_ERROR("malloc failed (caller=%p size=%u)\n", __builtin_return_address(0), size);
+#if HEAP_ALLOCATION_FAILS_ABORT
+ assert(0);
+#endif
+ }
+
return p;
-#else
-#if HEAP_ALLOCATION_FROM_SPIRAM_FIRST
- return heap_caps_malloc_prefer(size, 2, MALLOC_CAP_DEFAULT|MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL);
-#else
- return malloc(size);
-#endif /* #if HEAP_ALLOCATION_FROM_SPIRAM_FIRST */
-#endif /* #if HEAP_MEMORY_DEBUG */
}
void *osi_calloc_func(size_t size)
{
-#if HEAP_MEMORY_DEBUG
- void *p;
-#if HEAP_ALLOCATION_FROM_SPIRAM_FIRST
- p = heap_caps_calloc_prefer(1, size, 2, MALLOC_CAP_DEFAULT|MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL);
-#else
- p = calloc(1, size);
-#endif /* #if HEAP_ALLOCATION_FROM_SPIRAM_FIRST */
- osi_mem_dbg_record(p, size, __func__, __LINE__);
+ void *p = osi_calloc_base(size);
+
+ if (size != 0 && p == NULL) {
+ OSI_TRACE_ERROR("calloc failed (caller=%p size=%u)\n", __builtin_return_address(0), size);
+#if HEAP_ALLOCATION_FAILS_ABORT
+ assert(0);
+#endif
+ }
+
return p;
-#else
-#if HEAP_ALLOCATION_FROM_SPIRAM_FIRST
- return heap_caps_calloc_prefer(1, size, 2, MALLOC_CAP_DEFAULT|MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL);
-#else
- return calloc(1, size);
-#endif /* #if HEAP_ALLOCATION_FROM_SPIRAM_FIRST */
-#endif /* #if HEAP_MEMORY_DEBUG */
}
void osi_free_func(void *ptr)
diff --git a/lib/bt/common/osi/include/osi/allocator.h b/lib/bt/common/osi/include/osi/allocator.h
index 579f2b2b..d9504053 100644
--- a/lib/bt/common/osi/include/osi/allocator.h
+++ b/lib/bt/common/osi/include/osi/allocator.h
@@ -29,6 +29,15 @@ void *osi_malloc_func(size_t size);
void *osi_calloc_func(size_t size);
void osi_free_func(void *ptr);
+// Memory alloc function without print and assertion
+#if HEAP_ALLOCATION_FROM_SPIRAM_FIRST
+#define osi_malloc_base(size) heap_caps_malloc_prefer(size, 2, MALLOC_CAP_DEFAULT|MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL)
+#define osi_calloc_base(size) heap_caps_calloc_prefer(1, size, 2, MALLOC_CAP_DEFAULT|MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL)
+#else
+#define osi_malloc_base(size) malloc((size))
+#define osi_calloc_base(size) calloc(1, (size))
+#endif /* #if HEAP_ALLOCATION_FROM_SPIRAM_FIRST */
+
#if HEAP_MEMORY_DEBUG
void osi_mem_dbg_init(void);
@@ -41,13 +50,10 @@ void osi_men_dbg_set_section_start(uint8_t index);
void osi_men_dbg_set_section_end(uint8_t index);
uint32_t osi_mem_dbg_get_max_size_section(uint8_t index);
-#if HEAP_ALLOCATION_FROM_SPIRAM_FIRST
#define osi_malloc(size) \
({ \
void *p; \
- p = heap_caps_malloc_prefer(size, 2, \
- MALLOC_CAP_DEFAULT|MALLOC_CAP_SPIRAM, \
- MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL); \
+ p = osi_malloc_base(size); \
osi_mem_dbg_record(p, size, __func__, __LINE__); \
(void *)p; \
})
@@ -55,34 +61,11 @@ uint32_t osi_mem_dbg_get_max_size_section(uint8_t index);
#define osi_calloc(size) \
({ \
void *p; \
- p = heap_caps_calloc_prefer(1, size, 2, \
- MALLOC_CAP_DEFAULT|MALLOC_CAP_SPIRAM, \
- MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL); \
- osi_mem_dbg_record(p, size, __func__, __LINE__); \
- (void *)p; \
-})
-
-#else
-
-#define osi_malloc(size) \
-({ \
- void *p; \
- p = malloc((size)); \
+ p = osi_calloc_base(size); \
osi_mem_dbg_record(p, size, __func__, __LINE__); \
(void *)p; \
})
-#define osi_calloc(size) \
-({ \
- void *p; \
- p = calloc(1, (size)); \
- osi_mem_dbg_record(p, size, __func__, __LINE__); \
- (void *)p; \
-})
-
-#endif /* #if HEAP_ALLOCATION_FROM_SPIRAM_FIRST */
-
-
#if 0
#define osi_malloc(size) \
do { \
@@ -122,13 +105,9 @@ do { \
#else
-#if HEAP_ALLOCATION_FROM_SPIRAM_FIRST
-#define osi_malloc(size) heap_caps_malloc_prefer(size, 2, MALLOC_CAP_DEFAULT|MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL)
-#define osi_calloc(size) heap_caps_calloc_prefer(1, size, 2, MALLOC_CAP_DEFAULT|MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT|MALLOC_CAP_INTERNAL)
-#else
-#define osi_malloc(size) malloc((size))
-#define osi_calloc(size) calloc(1, (size))
-#endif /* #if HEAP_ALLOCATION_FROM_SPIRAM_FIRST */
+// Memory alloc function with print and assertion when fails
+#define osi_malloc(size) osi_malloc_func((size))
+#define osi_calloc(size) osi_calloc_func((size))
#define osi_free(p) free((p))
#endif /* HEAP_MEMORY_DEBUG */
diff --git a/lib/bt/common/osi/include/osi/fixed_pkt_queue.h b/lib/bt/common/osi/include/osi/fixed_pkt_queue.h
index f4235ca5..e121235e 100644
--- a/lib/bt/common/osi/include/osi/fixed_pkt_queue.h
+++ b/lib/bt/common/osi/include/osi/fixed_pkt_queue.h
@@ -76,4 +76,8 @@ void fixed_pkt_queue_unregister_dequeue(fixed_pkt_queue_t *queue);
void fixed_pkt_queue_process(fixed_pkt_queue_t *queue);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/lib/bt/common/osi/include/osi/hash_map.h b/lib/bt/common/osi/include/osi/hash_map.h
index fea1e021..a26eda61 100644
--- a/lib/bt/common/osi/include/osi/hash_map.h
+++ b/lib/bt/common/osi/include/osi/hash_map.h
@@ -20,6 +20,7 @@
#define _HASH_MAP_H_
#include <stdbool.h>
+#include <stddef.h>
#include <stdint.h>
struct hash_map_t;
diff --git a/lib/bt/common/osi/pkt_queue.c b/lib/bt/common/osi/pkt_queue.c
index 81abd1f0..4c149be2 100644
--- a/lib/bt/common/osi/pkt_queue.c
+++ b/lib/bt/common/osi/pkt_queue.c
@@ -25,6 +25,7 @@ struct pkt_queue *pkt_queue_create(void)
}
if (osi_mutex_new(&queue->lock) != 0) {
osi_free(queue);
+ return NULL;
}
struct pkt_queue_header *p = &queue->header;
STAILQ_INIT(p);
diff --git a/lib/bt/common/osi/thread.c b/lib/bt/common/osi/thread.c
index f53eadb6..91bc7906 100644
--- a/lib/bt/common/osi/thread.c
+++ b/lib/bt/common/osi/thread.c
@@ -271,10 +271,10 @@ _err:
}
for (int i = 0; i < thread->work_queue_num; i++) {
- if (thread->work_queues[i]) {
+ if (thread->work_queues && thread->work_queues[i]) {
osi_work_queue_delete(thread->work_queues[i]);
+ thread->work_queues[i] = NULL;
}
- thread->work_queues[i] = NULL;
}
if (thread->work_queues) {