component/bt : fix the init/deinit memory leak
1. modify the memory debug 2. fix init/deinit memory leak
This commit is contained in:
parent
7ae7a56457
commit
fd11beebcd
5 changed files with 43 additions and 26 deletions
|
@ -90,12 +90,12 @@ UINT16 GKI_poolutilization (UINT8);
|
||||||
header->p_next = NULL; \
|
header->p_next = NULL; \
|
||||||
header->Type = 0; \
|
header->Type = 0; \
|
||||||
header->size = (_size); \
|
header->size = (_size); \
|
||||||
(header + 1); \
|
(void *)(header + 1); \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define GKI_getpoolbuf(_pool_id) \
|
#define GKI_getpoolbuf(_pool_id) \
|
||||||
({ \
|
({ \
|
||||||
GKI_getbuf(gki_cb.com.pool_size[(_pool_id)]); \
|
(void *)GKI_getbuf(gki_cb.com.pool_size[(_pool_id)]); \
|
||||||
})
|
})
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -73,11 +73,11 @@ void osi_mem_dbg_record(void *p, int size, const char *func, int line)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= OSI_MEM_DBG_INFO_MAX) {
|
if (i >= OSI_MEM_DBG_INFO_MAX) {
|
||||||
LOG_ERROR("%s full !!\n", __func__);
|
LOG_ERROR("%s full %s %d !!\n", __func__, func, line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void osi_mem_dbg_clean(void *p)
|
void osi_mem_dbg_clean(void *p, const char *func, int line)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ void osi_mem_dbg_clean(void *p)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= OSI_MEM_DBG_INFO_MAX) {
|
if (i >= OSI_MEM_DBG_INFO_MAX) {
|
||||||
LOG_ERROR("%s full !!\n", __func__);
|
LOG_ERROR("%s full %s %d !!\n", __func__, func, line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,16 +130,35 @@ char *osi_strdup(const char *str)
|
||||||
|
|
||||||
void *osi_malloc_func(size_t size)
|
void *osi_malloc_func(size_t size)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_BLUEDROID_MEM_DEBUG
|
||||||
|
void *p;
|
||||||
|
|
||||||
|
p = calloc(1, size);
|
||||||
|
osi_mem_dbg_record(p, size, __func__, __LINE__);
|
||||||
|
return p;
|
||||||
|
#else
|
||||||
return calloc(1, size);
|
return calloc(1, size);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void *osi_calloc_func(size_t size)
|
void *osi_calloc_func(size_t size)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_BLUEDROID_MEM_DEBUG
|
||||||
|
void *p;
|
||||||
|
|
||||||
|
p = calloc(1, size);
|
||||||
|
osi_mem_dbg_record(p, size, __func__, __LINE__);
|
||||||
|
return p;
|
||||||
|
#else
|
||||||
return calloc(1, size);
|
return calloc(1, size);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void osi_free_func(void *ptr)
|
void osi_free_func(void *ptr)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_BLUEDROID_MEM_DEBUG
|
||||||
|
osi_mem_dbg_clean(ptr, __func__, __LINE__);
|
||||||
|
#endif
|
||||||
free(ptr);
|
free(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,22 +16,13 @@
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// #define LOG_TAG "bt_osi_future"
|
|
||||||
// #include <assert.h>
|
|
||||||
#include "bt_trace.h"
|
#include "bt_trace.h"
|
||||||
|
|
||||||
#include "allocator.h"
|
#include "allocator.h"
|
||||||
#include "future.h"
|
#include "future.h"
|
||||||
#include "osi.h"
|
#include "osi.h"
|
||||||
//#include "osi/include/log.h"
|
|
||||||
#include "osi_arch.h"
|
#include "osi_arch.h"
|
||||||
|
|
||||||
struct future_t {
|
|
||||||
bool ready_can_be_called;
|
|
||||||
osi_sem_t semaphore; // NULL semaphore means immediate future
|
|
||||||
void *result;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void future_free(future_t *future);
|
static void future_free(future_t *future);
|
||||||
|
|
||||||
future_t *future_new(void)
|
future_t *future_new(void)
|
||||||
|
@ -100,7 +91,7 @@ static void future_free(future_t *future)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!future->semaphore) {
|
if (future->semaphore) {
|
||||||
osi_sem_free(&future->semaphore);
|
osi_sem_free(&future->semaphore);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,14 +44,14 @@ void osi_free_func(void *ptr);
|
||||||
|
|
||||||
void osi_mem_dbg_init(void);
|
void osi_mem_dbg_init(void);
|
||||||
void osi_mem_dbg_record(void *p, int size, const char *func, int line);
|
void osi_mem_dbg_record(void *p, int size, const char *func, int line);
|
||||||
void osi_mem_dbg_clean(void *p);
|
void osi_mem_dbg_clean(void *p, const char *func, int line);
|
||||||
void osi_mem_dbg_show(void);
|
void osi_mem_dbg_show(void);
|
||||||
|
|
||||||
#define osi_malloc(size) \
|
#define osi_malloc(size) \
|
||||||
({ \
|
({ \
|
||||||
void *p; \
|
void *p; \
|
||||||
\
|
\
|
||||||
p = osi_malloc_func(size); \
|
p = calloc(1, (size)); \
|
||||||
osi_mem_dbg_record(p, size, __func__, __LINE__); \
|
osi_mem_dbg_record(p, size, __func__, __LINE__); \
|
||||||
(void *)p; \
|
(void *)p; \
|
||||||
})
|
})
|
||||||
|
@ -60,22 +60,22 @@ void osi_mem_dbg_show(void);
|
||||||
({ \
|
({ \
|
||||||
void *p; \
|
void *p; \
|
||||||
\
|
\
|
||||||
p = osi_calloc_func(size); \
|
p = calloc(1, (size)); \
|
||||||
osi_mem_dbg_record(p, size, __func__, __LINE__); \
|
osi_mem_dbg_record(p, size, __func__, __LINE__); \
|
||||||
(void *)p; \
|
(void *)p; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define osi_free(ptr) \
|
#define osi_free(ptr) \
|
||||||
({ \
|
({ \
|
||||||
osi_mem_dbg_clean(ptr); \
|
osi_mem_dbg_clean(ptr, __func__, __LINE__); \
|
||||||
osi_free_func((ptr)); \
|
free((ptr)); \
|
||||||
})
|
})
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define osi_malloc osi_malloc_func
|
#define osi_malloc(size) calloc(1, (size))
|
||||||
#define osi_calloc osi_calloc_func
|
#define osi_calloc(size) calloc(1, (size))
|
||||||
#define osi_free osi_free_func
|
#define osi_free(p) free((p))
|
||||||
|
|
||||||
#endif /* CONFIG_BLUEDROID_MEM_DEBUG */
|
#endif /* CONFIG_BLUEDROID_MEM_DEBUG */
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,14 @@
|
||||||
#define __FUTURE_H__
|
#define __FUTURE_H__
|
||||||
// #pragma once
|
// #pragma once
|
||||||
|
|
||||||
typedef struct future_t future_t;
|
#include "osi_arch.h"
|
||||||
|
|
||||||
|
struct future {
|
||||||
|
bool ready_can_be_called;
|
||||||
|
osi_sem_t semaphore; // NULL semaphore means immediate future
|
||||||
|
void *result;
|
||||||
|
};
|
||||||
|
typedef struct future future_t;
|
||||||
|
|
||||||
#define FUTURE_SUCCESS ((void *)1)
|
#define FUTURE_SUCCESS ((void *)1)
|
||||||
#define FUTURE_FAIL ((void *)0)
|
#define FUTURE_FAIL ((void *)0)
|
||||||
|
|
Loading…
Reference in a new issue