[mpp_mem]: add mpp_realloc function

git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@98 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
ChenHengming
2015-08-13 09:15:31 +00:00
parent 12cc808626
commit e80180c728
7 changed files with 71 additions and 6 deletions

View File

@@ -22,6 +22,13 @@ int os_malloc(void **memptr, size_t alignment, size_t size)
return posix_memalign(memptr, alignment, size);
}
int os_realloc(void *src, void **dst, size_t alignment, size_t size)
{
(void)alignment;
*dst = realloc(src, size);
return (*dst) ? (0) : (-1);
}
void os_free(void *ptr)
{
free(ptr);

View File

@@ -27,6 +27,9 @@
#define mpp_malloc(type, count) \
(type*)mpp_osal_malloc(MODULE_TAG, sizeof(type) * (count))
#define mpp_realloc(ptr, type, count) \
(type*)mpp_osal_realloc(MODULE_TAG, ptr, sizeof(type) * (count))
#define mpp_free(ptr) mpp_osal_free(ptr)
#ifdef __cplusplus
@@ -35,6 +38,7 @@ extern "C" {
void mpp_show_mem_status();
void *mpp_osal_malloc(char *tag, size_t size);
void *mpp_osal_realloc(char *tag, void *ptr, size_t size);
void mpp_osal_free(void *ptr);
#ifdef __cplusplus

View File

@@ -53,7 +53,7 @@ void _mpp_log(const char *tag, const char *fmt, ...)
} else if (len == MPP_LOG_MAX_LEN) {
buf = msg_log_warning;
} else if (fmt[len - 1] != '\n') {
char msg[MPP_LOG_MAX_LEN];
char msg[MPP_LOG_MAX_LEN+1];
snprintf(msg, sizeof(msg), "%s", fmt);
msg[len] = '\n';
msg[len + 1] = '\0';
@@ -79,7 +79,7 @@ void _mpp_err(const char *tag, const char *fmt, ...)
} else if (len == MPP_LOG_MAX_LEN) {
buf = msg_log_warning;
} else if (fmt[len - 1] != '\n') {
char msg[MPP_LOG_MAX_LEN];
char msg[MPP_LOG_MAX_LEN+1];
snprintf(msg, sizeof(msg), "%s", fmt);
msg[len] = '\n';
msg[len + 1] = '\0';

View File

@@ -89,6 +89,44 @@ void *mpp_osal_malloc(char *tag, size_t size)
return NULL;
}
void *mpp_osal_realloc(char *tag, void *ptr, size_t size)
{
void *ret;
if (NULL == ptr)
return mpp_osal_malloc(tag, size);
if (0 == size)
return NULL;
get_osal_mem_flag();
if (osal_mem_flag & OSAL_MEM_LIST_EN) {
struct mem_node *pos, *n;
ret = NULL;
list_for_each_entry_safe(pos, n, &mem_list, struct mem_node, list) {
if (ptr == pos->ptr) {
if (MPP_OK == os_realloc(ptr, &pos->ptr, RK_OSAL_MEM_ALIGN, size)) {
pos->size = size;
strncpy(pos->tag, tag, sizeof(pos->tag));
ret = pos->ptr;
} else {
list_del_init(&pos->list);
free(pos);
}
break;
}
}
} else {
ret = realloc(ptr, size);
}
if (NULL == ret)
mpp_err("mpp_realloc ptr 0x%p to size %d failed\n", ptr, size);
return ret;
}
void mpp_osal_free(void *ptr)
{
if (NULL == ptr)

View File

@@ -22,6 +22,7 @@ extern "C" {
#endif
int os_malloc(void **memptr, size_t alignment, size_t size);
int os_realloc(void *src, void **dst, size_t alignment, size_t size);
void os_free(void *ptr);
#ifdef __cplusplus

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
#define MODULE_TAG "mpp_malloc_test"
#define MODULE_TAG "mpp_mem_test"
#include "mpp_log.h"
#include "mpp_env.h"
@@ -29,11 +29,20 @@ int main()
mpp_set_env_u32("osal_mem_list", 1);
tmp = mpp_malloc(int, 100);
if (tmp) {
mpp_log("malloc success\n");
mpp_free(tmp);
mpp_log("malloc success ptr 0x%p\n", tmp);
} else {
mpp_log("malloc failed\n");
mpp_log("malloc failed\n");
}
if (tmp) {
tmp = mpp_realloc(tmp, int, 200);
if (tmp) {
mpp_log("realloc success ptr 0x%p\n", tmp);
} else {
mpp_log("realloc failed\n");
}
}
mpp_free(tmp);
mpp_log("mpp_mem_test done\n");
return 0;
}

View File

@@ -23,6 +23,12 @@ int os_malloc(void **memptr, size_t alignment, size_t size)
return (*memptr) ? (0) : (-1);
}
int os_realloc(void *src, void **dst, size_t alignment, size_t size)
{
*dst = _aligned_realloc(src, size, alignment);
return (*dst) ? (0) : (-1);
}
void os_free(void *ptr)
{
_aligned_free(ptr);