From 0e913f2a8f0adc2f69c85fdcc1a2077928e6f810 Mon Sep 17 00:00:00 2001 From: James Talbert <jtalbert@iastate.edu> Date: Fri, 3 May 2019 16:24:34 -0500 Subject: [PATCH] Fix memory leak --- quad/src/quad_app/callbacks.c | 45 ++++++++-------- quad/src/quad_app/log_data.c | 97 ++++++++++++++++------------------- quad/src/quad_app/log_data.h | 1 + quad/src/quad_app/type_def.h | 8 +-- 4 files changed, 73 insertions(+), 78 deletions(-) diff --git a/quad/src/quad_app/callbacks.c b/quad/src/quad_app/callbacks.c index eccc1f8fe..2a51f351e 100644 --- a/quad/src/quad_app/callbacks.c +++ b/quad/src/quad_app/callbacks.c @@ -448,6 +448,7 @@ int cb_overrideoutput(struct modular_structs *structs, struct metadata *meta, un float f = build_float(&data[1+i*4]); override_info->values[i] = f; } + return 0; } int cb_sendrtdata(struct modular_structs *structs, struct metadata *meta, unsigned char *data, unsigned short length) { @@ -456,32 +457,32 @@ int cb_sendrtdata(struct modular_structs *structs, struct metadata *meta, unsign return -1; int size = 0; u32 configData = (data[2] << 24) | (data[3] << 16) | (data[4] << 8) | (data[5]); - structs->flags_struct.lidarflags->quadHeight = read_bit(configData, 31); size += read_bit(configData, 31); + structs->flags_struct.lidarflags.quadHeight = read_bit(configData, 31); size += read_bit(configData, 31); /*BEGIN DOUBLE-TYPE FLAGS. If these are enabled, actual size of data sent is 2*read_bit due to * length of data. This needs to be compensated for in methods where total length of payload packet * needs to be known ahead of time. */ - structs->flags_struct.optflowflags->x_flow = read_bit(configData, 30); size += read_bit(configData, 30); - structs->flags_struct.optflowflags->y_flow = read_bit(configData, 29); size += read_bit(configData, 29); - structs->flags_struct.optflowflags->x_filter = read_bit(configData, 28); size += read_bit(configData, 28); - structs->flags_struct.optflowflags->y_filter = read_bit(configData, 27); size += read_bit(configData, 27); - structs->flags_struct.optflowflags->x_velocity = read_bit(configData, 26); size += read_bit(configData, 26); - structs->flags_struct.optflowflags->y_velocity = read_bit(configData, 25); size += read_bit(configData, 25); + structs->flags_struct.optflowflags.x_flow = read_bit(configData, 30); size += read_bit(configData, 30); + structs->flags_struct.optflowflags.y_flow = read_bit(configData, 29); size += read_bit(configData, 29); + structs->flags_struct.optflowflags.x_filter = read_bit(configData, 28); size += read_bit(configData, 28); + structs->flags_struct.optflowflags.y_filter = read_bit(configData, 27); size += read_bit(configData, 27); + structs->flags_struct.optflowflags.x_velocity = read_bit(configData, 26); size += read_bit(configData, 26); + structs->flags_struct.optflowflags.y_velocity = read_bit(configData, 25); size += read_bit(configData, 25); //END DOUBLE TYPE FLAGS. - structs->flags_struct.imuflags->gyro_x = read_bit(configData, 24); size += read_bit(configData, 24); - structs->flags_struct.imuflags->gyro_y = read_bit(configData, 23); size += read_bit(configData, 23); - structs->flags_struct.imuflags->gyro_z = read_bit(configData, 22); size += read_bit(configData, 22); - structs->flags_struct.imuflags->acc_x = read_bit(configData, 21); size += read_bit(configData, 21); - structs->flags_struct.imuflags->acc_y = read_bit(configData, 20); size += read_bit(configData, 20); - structs->flags_struct.imuflags->acc_z = read_bit(configData, 19); size += read_bit(configData, 19); - structs->flags_struct.imuflags->mag_x = read_bit(configData, 18); size += read_bit(configData, 18); - structs->flags_struct.imuflags->mag_y = read_bit(configData, 17); size += read_bit(configData, 17); - structs->flags_struct.imuflags->mag_z = read_bit(configData, 16); size += read_bit(configData, 16); - structs->flags_struct.errorflags->lidar = read_bit(configData, 15); size += read_bit(configData, 15); - structs->flags_struct.errorflags->consec_lidar = read_bit(configData, 14); size += read_bit(configData, 14); - structs->flags_struct.errorflags->optFlow = read_bit(configData, 13); size += read_bit(configData, 13); - structs->flags_struct.errorflags->consec_optFlow = read_bit(configData, 12); size += read_bit(configData, 12); - structs->flags_struct.errorflags->imu = read_bit(configData, 11); size += read_bit(configData, 11); - structs->flags_struct.errorflags->consec_imu = read_bit(configData, 10); size += read_bit(configData, 10); + structs->flags_struct.imuflags.gyro_x = read_bit(configData, 24); size += read_bit(configData, 24); + structs->flags_struct.imuflags.gyro_y = read_bit(configData, 23); size += read_bit(configData, 23); + structs->flags_struct.imuflags.gyro_z = read_bit(configData, 22); size += read_bit(configData, 22); + structs->flags_struct.imuflags.acc_x = read_bit(configData, 21); size += read_bit(configData, 21); + structs->flags_struct.imuflags.acc_y = read_bit(configData, 20); size += read_bit(configData, 20); + structs->flags_struct.imuflags.acc_z = read_bit(configData, 19); size += read_bit(configData, 19); + structs->flags_struct.imuflags.mag_x = read_bit(configData, 18); size += read_bit(configData, 18); + structs->flags_struct.imuflags.mag_y = read_bit(configData, 17); size += read_bit(configData, 17); + structs->flags_struct.imuflags.mag_z = read_bit(configData, 16); size += read_bit(configData, 16); + structs->flags_struct.errorflags.lidar = read_bit(configData, 15); size += read_bit(configData, 15); + structs->flags_struct.errorflags.consec_lidar = read_bit(configData, 14); size += read_bit(configData, 14); + structs->flags_struct.errorflags.optFlow = read_bit(configData, 13); size += read_bit(configData, 13); + structs->flags_struct.errorflags.consec_optFlow = read_bit(configData, 12); size += read_bit(configData, 12); + structs->flags_struct.errorflags.imu = read_bit(configData, 11); size += read_bit(configData, 11); + structs->flags_struct.errorflags.consec_imu = read_bit(configData, 10); size += read_bit(configData, 10); structs->flags_struct.flag_count = size; return 0; } diff --git a/quad/src/quad_app/log_data.c b/quad/src/quad_app/log_data.c index fe8aef14d..da7cc4681 100644 --- a/quad/src/quad_app/log_data.c +++ b/quad/src/quad_app/log_data.c @@ -138,39 +138,39 @@ void initialize_logging(log_t* log_struct, parameter_t* ps, SensorRTFlags_t * fl addParamToLog(log_struct, ps->flow_quality, CONST_VAL, "none"); int num_outputs = 0; - if (flags->imuflags->acc_x) + if (flags->imuflags.acc_x) { num_outputs++; } - if (flags->imuflags->acc_y) + if (flags->imuflags.acc_y) { num_outputs++; } - if (flags->imuflags->acc_z) + if (flags->imuflags.acc_z) { num_outputs++; } - if (flags->imuflags->gyro_x) + if (flags->imuflags.gyro_x) { num_outputs++; } - if (flags->imuflags->gyro_y) + if (flags->imuflags.gyro_y) { num_outputs++; } - if (flags->imuflags->gyro_z) + if (flags->imuflags.gyro_z) { num_outputs++; } - if (flags->imuflags->mag_x) + if (flags->imuflags.mag_x) { num_outputs++; } - if (flags->imuflags->mag_y) + if (flags->imuflags.mag_y) { num_outputs++; } - if (flags->imuflags->mag_z) + if (flags->imuflags.mag_z) { num_outputs++; } @@ -197,39 +197,39 @@ int log_data(log_t* log_struct, parameter_t* ps, SensorRTFlags_t * flags) //TODO make this not stupid thisRow[offset++] = log_struct->time_stamp; - if (flags->imuflags->acc_x) + if (flags->imuflags.acc_x) { thisRow[offset++] = log_struct->gam.accel_x; } - if (flags->imuflags->acc_y) + if (flags->imuflags.acc_y) { thisRow[offset++] = log_struct->gam.accel_y; } - if (flags->imuflags->acc_z) + if (flags->imuflags.acc_z) { thisRow[offset++] = log_struct->gam.accel_z; } - if (flags->imuflags->gyro_x) + if (flags->imuflags.gyro_x) { thisRow[offset++] = log_struct->gam.gyro_xVel_p; } - if (flags->imuflags->gyro_y) + if (flags->imuflags.gyro_y) { thisRow[offset++] = log_struct->gam.gyro_yVel_q; } - if (flags->imuflags->gyro_z) + if (flags->imuflags.gyro_z) { thisRow[offset++] = log_struct->gam.gyro_zVel_r; } - if (flags->imuflags->mag_x) + if (flags->imuflags.mag_x) { thisRow[offset++] = log_struct->gam.mag_x; } - if (flags->imuflags->mag_y) + if (flags->imuflags.mag_y) { thisRow[offset++] = log_struct->gam.mag_y; } - if (flags->imuflags->mag_z) + if (flags->imuflags.mag_z) { thisRow[offset++] = log_struct->gam.mag_z; } @@ -286,39 +286,39 @@ void RTprintheader(struct CommDriver *comm, log_t* log_struct, parameter_t* ps, // TODO make this not stupid safe_sprintf_cat(&buf, "%%Time"); - if (flags->imuflags->acc_x) + if (flags->imuflags.acc_x) { safe_sprintf_cat(&buf, "\taccel_x"); } - if (flags->imuflags->acc_y) + if (flags->imuflags.acc_y) { safe_sprintf_cat(&buf, "\taccel_y"); } - if (flags->imuflags->acc_z) + if (flags->imuflags.acc_z) { safe_sprintf_cat(&buf, "\taccel_z"); } - if (flags->imuflags->gyro_x) + if (flags->imuflags.gyro_x) { safe_sprintf_cat(&buf, "\tgyro_x"); } - if (flags->imuflags->gyro_y) + if (flags->imuflags.gyro_y) { safe_sprintf_cat(&buf, "\tgyro_y"); } - if (flags->imuflags->gyro_z) + if (flags->imuflags.gyro_z) { safe_sprintf_cat(&buf, "\tgyro_z"); } - if (flags->imuflags->mag_x) + if (flags->imuflags.mag_x) { safe_sprintf_cat(&buf, "\tmag_x"); } - if (flags->imuflags->mag_y) + if (flags->imuflags.mag_y) { safe_sprintf_cat(&buf, "\tmag_y_x"); } - if (flags->imuflags->mag_z) + if (flags->imuflags.mag_z) { safe_sprintf_cat(&buf, "\tmag_z"); } @@ -344,39 +344,39 @@ void RTprintheader(struct CommDriver *comm, log_t* log_struct, parameter_t* ps, buf.size = 0; safe_sprintf_cat(&buf, "&s"); // The pre-defined ones - if (flags->imuflags->acc_x) + if (flags->imuflags.acc_x) { safe_sprintf_cat(&buf, "\tG"); } - if (flags->imuflags->acc_y) + if (flags->imuflags.acc_y) { safe_sprintf_cat(&buf, "\tG"); } - if (flags->imuflags->acc_z) + if (flags->imuflags.acc_z) { safe_sprintf_cat(&buf, "\tG"); } - if (flags->imuflags->gyro_x) + if (flags->imuflags.gyro_x) { safe_sprintf_cat(&buf, "\trad/s"); } - if (flags->imuflags->gyro_y) + if (flags->imuflags.gyro_y) { safe_sprintf_cat(&buf, "\trad/s"); } - if (flags->imuflags->gyro_z) + if (flags->imuflags.gyro_z) { safe_sprintf_cat(&buf, "\trad/s"); } - if (flags->imuflags->mag_x) + if (flags->imuflags.mag_x) { safe_sprintf_cat(&buf, "\tuT"); } - if (flags->imuflags->mag_y) + if (flags->imuflags.mag_y) { safe_sprintf_cat(&buf, "\tuT"); } - if (flags->imuflags->mag_z) + if (flags->imuflags.mag_z) { safe_sprintf_cat(&buf, "\tuT"); } @@ -529,20 +529,13 @@ void format_log(int idx, log_t* log_struct, struct str* buf) { Initially sets it so that all debug values are zero */ void initializeFlags(SensorRTFlags_t * flags) { - - flags = calloc(1, sizeof(SensorRTFlags_t)); - flags -> imuflags = calloc(1, sizeof(IMUFlags_t)); - flags -> optflowflags = calloc(1, sizeof(OptFlowFlags_t)); - flags -> lidarflags = calloc(1, sizeof(lidarFlags_t)); - flags -> errorflags = calloc(1, sizeof(SensorErrorFlags_t)); - flags -> flag_count = 0; -} - -void freeFlags(SensorRTFlags_t * flags){ - free(flags -> imuflags); - free(flags -> optflowflags); - free(flags -> lidarflags); - free(flags -> errorflags); - free(flags -> flag_count); - free(flags); + IMUFlags_t imu = {0,0,0, 0,0,0, 0,0,0}; + flags->imuflags = imu; + OptFlowFlags_t optf = {0,0, 0,0, 0,0}; + flags->optflowflags = optf; + lidarFlags_t lidar = {0}; + flags->lidarflags = lidar; + SensorErrorFlags_t se = {0,0,0, 0,0,0}; + flags->errorflags = se; + flags->flag_count = 0; } diff --git a/quad/src/quad_app/log_data.h b/quad/src/quad_app/log_data.h index b72717524..a34e98177 100644 --- a/quad/src/quad_app/log_data.h +++ b/quad/src/quad_app/log_data.h @@ -15,6 +15,7 @@ void initialize_logging(log_t* log_struct, parameter_t* ps, SensorRTFlags_t * flags); +void initializeFlags(SensorRTFlags_t * flags); /** * Adds the given block output to the data to be logged */ diff --git a/quad/src/quad_app/type_def.h b/quad/src/quad_app/type_def.h index 8ffcea2c6..4f667b879 100644 --- a/quad/src/quad_app/type_def.h +++ b/quad/src/quad_app/type_def.h @@ -535,10 +535,10 @@ typedef struct SensorErrorFlags */ typedef struct SensorRTFlags { - IMUFlags_t * imuflags; - OptFlowFlags_t * optflowflags; - lidarFlags_t * lidarflags; - SensorErrorFlags_t * errorflags; + IMUFlags_t imuflags; + OptFlowFlags_t optflowflags; + lidarFlags_t lidarflags; + SensorErrorFlags_t errorflags; int flag_count; } SensorRTFlags_t; -- GitLab