From: Masami Hiramatsu <mhiramat@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: linux-kernel@vger.kernel.org, Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>
Subject: Re: [PATCH perf/core v2 1/8] perf: Rewrite strbuf not to die
Date: Tue, 10 May 2016 10:00:19 +0900 [thread overview]
Message-ID: <20160510100019.1d737eb3576b21009b502a4c@kernel.org> (raw)
In-Reply-To: <20160505232538.GK11069@kernel.org>
On Thu, 5 May 2016 20:25:38 -0300
Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> Em Sat, Apr 30, 2016 at 12:09:50AM +0900, Masami Hiramatsu escreveu:
> > Rewrite strbuf implementation not to use die() nor xrealloc().
> > Instead of die, now most of the API returns error code or 0 if
> > succeeded.
> >
> > Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
> > ---
> > tools/perf/util/strbuf.c | 93 +++++++++++++++++++++++++++++++++-------------
> > tools/perf/util/strbuf.h | 25 +++++++-----
> > 2 files changed, 82 insertions(+), 36 deletions(-)
> >
> > diff --git a/tools/perf/util/strbuf.c b/tools/perf/util/strbuf.c
> > index 8fb7329..a98bb60 100644
> > --- a/tools/perf/util/strbuf.c
> > +++ b/tools/perf/util/strbuf.c
> > @@ -1,3 +1,4 @@
> > +#include "debug.h"
> > #include "cache.h"
> > #include <linux/kernel.h>
> >
> > @@ -17,12 +18,13 @@ int prefixcmp(const char *str, const char *prefix)
> > */
> > char strbuf_slopbuf[1];
> >
> > -void strbuf_init(struct strbuf *sb, ssize_t hint)
> > +int strbuf_init(struct strbuf *sb, ssize_t hint)
> > {
> > sb->alloc = sb->len = 0;
> > sb->buf = strbuf_slopbuf;
> > if (hint)
> > - strbuf_grow(sb, hint);
> > + return strbuf_grow(sb, hint);
> > + return 0;
> > }
> >
> > void strbuf_release(struct strbuf *sb)
> > @@ -42,67 +44,104 @@ char *strbuf_detach(struct strbuf *sb, size_t *sz)
> > return res;
> > }
> >
> > -void strbuf_grow(struct strbuf *sb, size_t extra)
> > +int strbuf_grow(struct strbuf *sb, size_t extra)
> > {
> > - if (sb->len + extra + 1 <= sb->len)
> > - die("you want to use way too much memory");
> > - if (!sb->alloc)
> > - sb->buf = NULL;
> > - ALLOC_GROW(sb->buf, sb->len + extra + 1, sb->alloc);
> > + char *buf;
> > + size_t nr = sb->len + extra + 1;
> > +
> > + if (nr < sb->alloc)
> > + return 0;
> > +
> > + if (nr <= sb->len)
> > + return -E2BIG;
> > +
> > + if (alloc_nr(sb->alloc) > nr)
> > + nr = alloc_nr(sb->alloc);
> > +
> > + buf = malloc(nr * sizeof(*buf));
> > + if (!buf)
> > + return -ENOMEM;
> > +
> > + if (sb->alloc) {
> > + memcpy(buf, sb->buf, sb->alloc);
> > + free(sb->buf);
> > + }
>
> Why not use realloc? I.e. as the old code did, the problem was not that,
> was just the panic when the realloc operation fails, that you are
> removing here.
Oops, right. it seems I misunderstood the return value of realloc.
>
> I.e. the above would be:
>
> buf = realloc(sb->buf, nr * sizeof(*buf));
> if (!buf)
> return -ENOMEM;
>
> > + sb->buf = buf;
> > + sb->alloc = nr;
> > + return 0;
>
> I.e. no need to do the memcpy() nor the free(), no?
Yes, agreed.
I'll update to do so.
Thanks!
--
Masami Hiramatsu <mhiramat@kernel.org>
next prev parent reply other threads:[~2016-05-10 1:00 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-29 15:09 [PATCH perf/core v2 0/8] perf tools: Update strbuf to remove xrealloc Masami Hiramatsu
2016-04-29 15:09 ` [PATCH perf/core v2 1/8] perf: Rewrite strbuf not to die Masami Hiramatsu
2016-05-05 23:25 ` Arnaldo Carvalho de Melo
2016-05-05 23:49 ` Arnaldo Carvalho de Melo
2016-05-10 1:00 ` Masami Hiramatsu [this message]
2016-04-29 15:10 ` [PATCH perf/core v2 2/8] perf probe: Check the return value of strbuf APIs Masami Hiramatsu
2016-05-05 23:46 ` Arnaldo Carvalho de Melo
2016-05-10 2:37 ` Masami Hiramatsu
2016-04-29 15:10 ` [PATCH perf/core v2 3/8] perf help: Make check_emacsclient_version to check " Masami Hiramatsu
2016-05-05 23:51 ` Arnaldo Carvalho de Melo
2016-04-29 15:10 ` [PATCH perf/core v2 4/8] perf: Make alias handler to check return value of strbuf Masami Hiramatsu
2016-05-05 23:53 ` Arnaldo Carvalho de Melo
2016-04-29 15:10 ` [PATCH perf/core v2 5/8] perf header: Make topology checkers " Masami Hiramatsu
2016-05-05 23:55 ` Arnaldo Carvalho de Melo
2016-05-10 2:58 ` Masami Hiramatsu
2016-04-29 15:10 ` [PATCH perf/core v2 6/8] perf pmu: Make pmu_formats_string " Masami Hiramatsu
2016-05-05 23:56 ` Arnaldo Carvalho de Melo
2016-04-29 15:10 ` [PATCH perf/core v2 7/8] perf help: Do not use ALLOC_GROW in add_cmd_list Masami Hiramatsu
2016-05-05 23:58 ` Arnaldo Carvalho de Melo
2016-04-29 15:11 ` [PATCH perf/core v2 8/8] perf tools: Remove xrealloc and ALLOC_GROW Masami Hiramatsu
2016-05-05 23:58 ` Arnaldo Carvalho de Melo
2016-04-29 15:14 ` [PATCH perf/core v2 0/8] perf tools: Update strbuf to remove xrealloc Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160510100019.1d737eb3576b21009b502a4c@kernel.org \
--to=mhiramat@kernel.org \
--cc=acme@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®