From 1cf6596368da94ac48656dbb117f4e8c0cde58b9 Mon Sep 17 00:00:00 2001 From: Sebastien GODARD Date: Sat, 30 Dec 2017 11:16:32 +0100 Subject: [PATCH] sadc: Fix segfault that may happen when appending data to file Buffers need to be allocated according to activities present in file so that we can append data to that file. Signed-off-by: Sebastien GODARD --- sadc.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/sadc.c b/sadc.c index c96d134..edc7085 100644 --- a/sadc.c +++ b/sadc.c @@ -936,20 +936,6 @@ void open_ofile(int *ofd, char ofile[], int restart_mark) p = get_activity_position(act, file_act[i].id, EXIT_IF_NOT_FOUND); - /* - * Force number of sub-items to that of the file, and reallocate structures. - * We don't care for items as their structures will be dynamically allocated. - */ - if (file_act[i].nr2 != act[p]->nr2) { - act[p]->nr2 = file_act[i].nr2; - SREALLOC(act[p]->_buf0, void, - (size_t) act[p]->msize * (size_t) act[p]->nr_ini * (size_t) act[p]->nr2); - } - - /* Save activity sequence */ - id_seq[i] = file_act[i].id; - act[p]->options |= AO_COLLECTED; - /* * sar doesn't expect a number of items equal to 0. * Yet @nr_ini may be 0 if no items have been found on current machine. @@ -958,6 +944,21 @@ void open_ofile(int *ofd, char ofile[], int restart_mark) * the machine. */ act[p]->nr_ini = file_act[i].nr; + + /* + * Force number of sub-items to that of the file, and reallocate structures. + * Note: Structures have been allocated in sa_sys_init() only for activities + * that are collected. But since activities from file now prevail over them, + * we need to reallocate. + */ + act[p]->nr2 = file_act[i].nr2; + SREALLOC(act[p]->_buf0, void, + (size_t) act[p]->msize * (size_t) act[p]->nr_ini * (size_t) act[p]->nr2); + act[p]->nr_allocated = act[p]->nr_ini; + + /* Save activity sequence */ + id_seq[i] = file_act[i].id; + act[p]->options |= AO_COLLECTED; } return; -- 2.40.0