TT#98401 refactor cdr alloc/free into separate functions

Keep track of how many CDRs were allocated between the alloc and the
free.

Change-Id: Ibdc74f93e828a98f5a69290a2e7cf6d6fd7e5955
mr10.0.1
Richard Fuchs 5 years ago
parent 235a1aa833
commit 70b33ed9ef

36
cdr.c

@ -8,7 +8,7 @@
#include "mediator.h"
static int cdr_create_cdrs(med_entry_t *records, uint64_t count,
cdr_entry_t **cdrs, uint64_t *cdr_count, uint8_t *trash, int do_intermediate);
cdr_entry_t **cdrs, uint64_t *cdr_count, uint64_t *alloc_size, uint8_t *trash, int do_intermediate);
static const char* cdr_map_status(const char *sip_status)
{
@ -40,6 +40,13 @@ static const char* cdr_map_status(const char *sip_status)
return CDR_STATUS_UNKNOWN;
}
static void free_cdrs(cdr_entry_t **cdrs, uint64_t cdr_count) {
g_free(*cdrs);
*cdrs = NULL;
}
int cdr_process_records(med_entry_t *records, uint64_t count, uint64_t *ext_count,
struct medmysql_batches *batches, int do_intermediate)
{
@ -58,7 +65,7 @@ int cdr_process_records(med_entry_t *records, uint64_t count, uint64_t *ext_coun
cdr_entry_t *cdrs = NULL;
uint64_t cdr_count;
uint64_t cdr_count, alloc_size = 0;
*ext_count = 0;
@ -118,7 +125,7 @@ int cdr_process_records(med_entry_t *records, uint64_t count, uint64_t *ext_coun
}
else
{
if(cdr_create_cdrs(records, count, &cdrs, &cdr_count, &trash, do_intermediate) != 0)
if(cdr_create_cdrs(records, count, &cdrs, &cdr_count, &alloc_size, &trash, do_intermediate) != 0)
goto error;
else
{
@ -164,7 +171,7 @@ int cdr_process_records(med_entry_t *records, uint64_t count, uint64_t *ext_coun
{
/* TODO: no CDRs created? */
}
free(cdrs);
free_cdrs(&cdrs, alloc_size);
cdrs = NULL;
}
}
@ -202,7 +209,7 @@ int cdr_process_records(med_entry_t *records, uint64_t count, uint64_t *ext_coun
error:
if(cdrs)
free(cdrs);
free_cdrs(&cdrs, alloc_size);
return -1;
}
@ -1346,12 +1353,20 @@ err:
}
static cdr_entry_t *alloc_cdrs(uint64_t cdr_count) {
cdr_entry_t *cdrs = g_malloc0(sizeof(*cdrs) * cdr_count);
if (!cdrs)
return NULL;
return cdrs;
}
static int cdr_create_cdrs(med_entry_t *records, uint64_t count,
cdr_entry_t **cdrs, uint64_t *cdr_count, uint8_t *trash, int do_intermediate)
cdr_entry_t **cdrs, uint64_t *cdr_count, uint64_t *alloc_size, uint8_t *trash, int do_intermediate)
{
uint64_t i = 0, cdr_index = 0;
uint32_t invites = 0;
size_t cdr_size;
uint64_t invites = 0;
int timed_out = 0;
char *endtime = NULL;
@ -1396,14 +1411,13 @@ static int cdr_create_cdrs(med_entry_t *records, uint64_t count,
}
/* each INVITE maps to a CDR */
cdr_size = sizeof(cdr_entry_t) * invites;
*cdrs = (cdr_entry_t*)malloc(cdr_size);
*cdrs = alloc_cdrs(invites);
if(*cdrs == NULL)
{
L_ERROR("Error allocating memory for cdrs: %s", strerror(errno));
return -1;
}
memset(*cdrs, 0, cdr_size);
*alloc_size = invites;
for(i = 0; i < count; ++i)
{

Loading…
Cancel
Save