From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754167AbcBXOSz (ORCPT ); Wed, 24 Feb 2016 09:18:55 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57507 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751701AbcBXOSy (ORCPT ); Wed, 24 Feb 2016 09:18:54 -0500 Date: Wed, 24 Feb 2016 15:18:45 +0100 From: Jiri Olsa To: Wang Nan Cc: Alexei Starovoitov , Arnaldo Carvalho de Melo , Arnaldo Carvalho de Melo , Brendan Gregg , Adrian Hunter , Cody P Schafer , "David S. Miller" , He Kuang , =?iso-8859-1?Q?J=E9r=E9mie?= Galarneau , Jiri Olsa , Kirill Smelkov , Li Zefan , Masami Hiramatsu , Namhyung Kim , Peter Zijlstra , pi3orama@163.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH 20/48] perf tools: Make ordered_events reusable Message-ID: <20160224141845.GC27710@krava.redhat.com> References: <1456132275-98875-1-git-send-email-wangnan0@huawei.com> <1456132275-98875-21-git-send-email-wangnan0@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456132275-98875-21-git-send-email-wangnan0@huawei.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Feb 22, 2016 at 09:10:47AM +0000, Wang Nan wrote: > 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 > Signed-off-by: He Kuang > Cc: Arnaldo Carvalho de Melo > Cc: Jiri Olsa > Cc: Masami Hiramatsu > Cc: Namhyung Kim > Cc: Zefan Li > Cc: pi3orama@163.com > --- > 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); > } I think it'd be better to put that memset call into ordered_events__init and introduce ordered_events__reinit that calls ordered_events__free and ordered_events__init with oe->deliver as you do above that way it'll be apparent when you reuse the ordered_events struct thanks, jirka