diff --git a/include/recorder-logger.h b/include/recorder-logger.h index 0a41a7c..51cf4e2 100644 --- a/include/recorder-logger.h +++ b/include/recorder-logger.h @@ -40,6 +40,7 @@ typedef struct Record_t { unsigned char arg_count; char **args; // Store all arguments in array pthread_t tid; + void* res; // return value void* record_stack; // per-thread record stack of cascading calls struct Record_t *prev, *next; diff --git a/include/recorder.h b/include/recorder.h index 780ec5c..9ded9c0 100644 --- a/include/recorder.h +++ b/include/recorder.h @@ -56,7 +56,12 @@ record->tstart = recorder_wtime(); \ GOTCHA_SET_REAL_CALL_NOCHECK(func); \ ret res = GOTCHA_REAL_CALL(func) real_args ; \ - record->tend = recorder_wtime(); + record->tend = recorder_wtime(); \ + record->res = NULL; \ + if (sizeof(ret)) { \ + record->res = malloc(sizeof(ret)); \ + memcpy(record->res, &res, sizeof(ret)); \ + } // Fortran wrappers call this // ierr is of type MPI_Fint*, set only for fortran calls diff --git a/lib/recorder-logger.c b/lib/recorder-logger.c index 87d2544..429a7ac 100644 --- a/lib/recorder-logger.c +++ b/lib/recorder-logger.c @@ -53,6 +53,11 @@ void free_record(Record *record) { recorder_free(record->args, sizeof(char*)*record->arg_count); } + // we don't the return type so we use the system free() + if(record->res) + free(record->res); + + record->res = NULL; record->args = NULL; recorder_free(record, sizeof(Record)); }