On Tue, Feb 23, 2016 at 05:21:02PM +0100, Nahim El Atmani wrote: > * strace.c: add create_tcbtab() that allocate the minimum required amount of > memory to create the tcbtab. Add a tcbtab existance check in expand_tcbtab() > that will be called by alloctcb() when no tcb are available (first call and > subsequent calls when tcbtab is full). Remove the always done at first tcbtab > allocation in init(), now replaced by create_tcbtab() and called when needed. > > Signed-off-by: Nahim El Atmani <[email protected]> > Reviewed-By: Gabriel Laskar <[email protected]> > Reported-by: haris iqbal <[email protected]> > --- > strace.c | 35 ++++++++++++++++++++++------------- > 1 file changed, 22 insertions(+), 13 deletions(-) > > diff --git a/strace.c b/strace.c > index 785cc60..d18aa7e 100644 > --- a/strace.c > +++ b/strace.c > @@ -689,6 +689,18 @@ newoutf(struct tcb *tcp) > } > > static void > +create_tcbtab(void) > +{ > + struct tcb *tcp; > + > + /* Allocate the initial tcbtab. */ > + tcbtabsize = 1; /* We don't need much more at first */ > + tcbtab = xcalloc(tcbtabsize, sizeof(tcbtab[0])); > + tcp = xcalloc(tcbtabsize, sizeof(*tcp)); > + tcbtab[0] = tcp; > +} > + > +static void > expand_tcbtab(void) > { > /* Allocate some more TCBs and expand the table. > @@ -696,10 +708,16 @@ expand_tcbtab(void) > callers have pointers and it would be a pain. > So tcbtab is a table of pointers. Since we never > free the TCBs, we allocate a single chunk of many. */ > - unsigned int i = tcbtabsize; > - struct tcb *newtcbs = xcalloc(tcbtabsize, sizeof(newtcbs[0])); > - struct tcb **newtab = xreallocarray(tcbtab, tcbtabsize * 2, > - sizeof(tcbtab[0])); > + unsigned int i; > + struct tcb *newtcbs; > + struct tcb **newtab; > + > + if (!tcbtabsize) > + create_tcbtab(); > + > + i = tcbtabsize; > + newtcbs = xcalloc(tcbtabsize, sizeof(newtcbs[0])); > + newtab = xreallocarray(tcbtab, tcbtabsize * 2, sizeof(tcbtab[0]));
This means that the first expand_tcbtab() would end up with two calloc calls (via create_tcbtab) immediately followed by calloc and realloc. I think we could do better than this. -- ldv
pgpBpbFHwYVhy.pgp
Description: PGP signature
------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________ Strace-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/strace-devel
