add versions of MEM_reallocN, MEM_recallocN which take a string arg so new allocs have an ID, changing existing functions signatures would be too disruptive at the moment.

This commit is contained in:
Campbell Barton
2013-08-03 17:53:41 +00:00
parent 5f72462e38
commit 2a8d76d734
4 changed files with 37 additions and 21 deletions

View File

@@ -102,6 +102,19 @@ extern "C" {
#endif
;
void *MEM_reallocN_id(void *vmemh, size_t len, const char *str)
#if MEM_GNU_ATTRIBUTES
__attribute__((warn_unused_result))
__attribute__((alloc_size(2)))
#endif
;
void *MEM_recallocN_id(void *vmemh, size_t len, const char *str)
#if MEM_GNU_ATTRIBUTES
__attribute__((warn_unused_result))
__attribute__((alloc_size(2)))
#endif
;
/**
* Reallocates a block of memory, and returns pointer to the newly
* allocated block, the old one is freed. this is not as optimized

View File

@@ -371,7 +371,7 @@ void *MEM_dupallocN(const void *vmemh)
return newp;
}
void *MEM_reallocN(void *vmemh, size_t len)
void *MEM_reallocN_id(void *vmemh, size_t len, const char *str)
{
void *newp = NULL;
@@ -394,13 +394,13 @@ void *MEM_reallocN(void *vmemh, size_t len)
MEM_freeN(vmemh);
}
else {
newp = MEM_mallocN(len, __func__);
newp = MEM_mallocN(len, str);
}
return newp;
}
void *MEM_recallocN(void *vmemh, size_t len)
void *MEM_recallocN_id(void *vmemh, size_t len, const char *str)
{
void *newp = NULL;
@@ -428,12 +428,23 @@ void *MEM_recallocN(void *vmemh, size_t len)
MEM_freeN(vmemh);
}
else {
newp = MEM_callocN(len, __func__);
newp = MEM_callocN(len, str);
}
return newp;
}
void *MEM_reallocN(void *vmemh, size_t len)
{
return MEM_reallocN_id(vmemh, len, __func__);
}
void *MEM_recallocN(void *vmemh, size_t len)
{
return MEM_recallocN_id(vmemh, len, __func__);
}
#ifdef DEBUG_BACKTRACE
# if defined(__linux__) || defined(__APPLE__)
static void make_memhead_backtrace(MemHead *memh)

View File

@@ -144,12 +144,9 @@ static void fcm_generator_verify(FModifier *fcm)
const int arraysize_new = data->poly_order + 1;
/* arraysize needs to be order+1, so resize if not */
if (data->arraysize != arraysize_new) {
if (data->coefficients) {
data->coefficients = MEM_recallocN(data->coefficients, sizeof(float) * arraysize_new);
}
else {
data->coefficients = MEM_callocN(sizeof(float) * arraysize_new, "FMod_Generator_Coefs");
}
data->coefficients = MEM_recallocN_id(data->coefficients,
sizeof(float) * arraysize_new,
"FMod_Generator_Coefs");
data->arraysize = arraysize_new;
}
break;
@@ -159,12 +156,9 @@ static void fcm_generator_verify(FModifier *fcm)
const int arraysize_new = data->poly_order * 2;
/* arraysize needs to be (2 * order), so resize if not */
if (data->arraysize != arraysize_new) {
if (data->coefficients) {
data->coefficients = MEM_recallocN(data->coefficients, sizeof(float) * arraysize_new);
}
else {
data->coefficients = MEM_callocN(sizeof(float) * arraysize_new, "FMod_Generator_Coefs");
}
data->coefficients = MEM_recallocN_id(data->coefficients,
sizeof(float) * arraysize_new,
"FMod_Generator_Coefs");
data->arraysize = arraysize_new;
}
break;

View File

@@ -118,11 +118,9 @@ static void rna_GPencilLayer_info_set(PointerRNA *ptr, const char *value)
static void rna_GPencil_stroke_point_add(bGPDstroke *stroke, int count)
{
if (count > 0) {
if (stroke->points == NULL)
stroke->points = MEM_callocN(sizeof(bGPDspoint) * count, "gp_stroke_points");
else
stroke->points = MEM_recallocN(stroke->points, sizeof(bGPDspoint) * (stroke->totpoints + count));
stroke->points = MEM_recallocN_id(stroke->points,
sizeof(bGPDspoint) * (stroke->totpoints + count),
"gp_stroke_points");
stroke->totpoints += count;
}
}