On Wed, Feb 24, 2016 at 02:22:34PM +0100, Nahim El Atmani wrote: [...] > --- 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,14 +708,22 @@ 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])); > - tcbtabsize *= 2; > - tcbtab = newtab; > - while (i < tcbtabsize) > - tcbtab[i++] = newtcbs++; > + unsigned int i; > + struct tcb *newtcbs; > + struct tcb **newtab; > + > + if (!tcbtabsize) { > + create_tcbtab(); > + } else { > + i = tcbtabsize; > + newtcbs = xcalloc(tcbtabsize, sizeof(newtcbs[0])); > + newtab = xreallocarray(tcbtab, tcbtabsize * 2, > + sizeof(tcbtab[0])); > + tcbtabsize *= 2; > + tcbtab = newtab; > + while (i < tcbtabsize) > + tcbtab[i++] = newtcbs++; > + } > }
This is better. Do you think create_tcbtab that's called just once from expand_tcbtab worth to be a separate function? What if these two branches of code were merged, e.g. unsigned int new_tcbtabsize, alloc_tcbtabsize; if (tcbtabsize) { alloc_tcbtabsize = tcbtabsize; new_tcbtabsize = tcbtabsize << 1; } else { alloc_tcbtabsize = new_tcbtabsize = 1; } etc. Wouldn't the result code be more compact and somewhat more readable? -- ldv
pgpzbAc1DzsUg.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 Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel