ordered_events__free() leaves linked lists and timestamps not cleared, so unable to be reused after ordered_events__free(). Which is inconvenient after 'perf record' supports generating multiple perf.data output and process build-ids for each of them.
Calls ordered_events__init() in ordered_events__free() so ordered_events can be reused. Signed-off-by: Wang Nan <[email protected]> Signed-off-by: He Kuang <[email protected]> Cc: Arnaldo Carvalho de Melo <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Masami Hiramatsu <[email protected]> Cc: Namhyung Kim <[email protected]> Cc: Zefan Li <[email protected]> Cc: [email protected] --- tools/perf/util/ordered-events.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c index b1b9e23..70c0dc8 100644 --- a/tools/perf/util/ordered-events.c +++ b/tools/perf/util/ordered-events.c @@ -299,6 +299,8 @@ void ordered_events__init(struct ordered_events *oe, ordered_events__deliver_t d void ordered_events__free(struct ordered_events *oe) { + ordered_events__deliver_t old_deliver = oe->deliver; + while (!list_empty(&oe->to_free)) { struct ordered_event *event; @@ -307,4 +309,7 @@ void ordered_events__free(struct ordered_events *oe) free_dup_event(oe, event->event); free(event); } + + memset(oe, '\0', sizeof(*oe)); + ordered_events__init(oe, old_deliver); } -- 1.8.3.4

