Simplify expand_tcbtab and alloc_tcb
Get rid of a few intermediate variables, simplifies a few expressions, and uses error_msg_and_die instead of more verbose fprintf+cleanup+exit sequence. In alloc_tcp, I use memset to clear entire new tcp. This not only saves a few bytes of code, but lowers the chances of future bugs where some data "leaks out" into new tcb's from old ones because we forgot to re-initialize it. * strace.c (expand_tcbtab): Simplify this function. No logic changes. (alloc_tcb): Likewise. Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
This commit is contained in:
parent
e7c9024acf
commit
18da273675
32
strace.c
32
strace.c
@ -1252,21 +1252,15 @@ expand_tcbtab(void)
|
|||||||
callers have pointers and it would be a pain.
|
callers have pointers and it would be a pain.
|
||||||
So tcbtab is a table of pointers. Since we never
|
So tcbtab is a table of pointers. Since we never
|
||||||
free the TCBs, we allocate a single chunk of many. */
|
free the TCBs, we allocate a single chunk of many. */
|
||||||
struct tcb **newtab = (struct tcb **)
|
int i = tcbtabsize;
|
||||||
realloc(tcbtab, 2 * tcbtabsize * sizeof tcbtab[0]);
|
struct tcb *newtcbs = calloc(tcbtabsize, sizeof(newtcbs[0]));
|
||||||
struct tcb *newtcbs = (struct tcb *) calloc(tcbtabsize,
|
struct tcb **newtab = realloc(tcbtab, tcbtabsize * 2 * sizeof(tcbtab[0]));
|
||||||
sizeof *newtcbs);
|
if (newtab == NULL || newtcbs == NULL)
|
||||||
int i;
|
error_msg_and_die("expand_tcbtab: out of memory");
|
||||||
if (newtab == NULL || newtcbs == NULL) {
|
|
||||||
fprintf(stderr, "%s: expand_tcbtab: out of memory\n",
|
|
||||||
progname);
|
|
||||||
cleanup();
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
for (i = tcbtabsize; i < 2 * tcbtabsize; ++i)
|
|
||||||
newtab[i] = &newtcbs[i - tcbtabsize];
|
|
||||||
tcbtabsize *= 2;
|
tcbtabsize *= 2;
|
||||||
tcbtab = newtab;
|
tcbtab = newtab;
|
||||||
|
while (i < tcbtabsize)
|
||||||
|
tcbtab[i++] = newtcbs++;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct tcb *
|
struct tcb *
|
||||||
@ -1281,16 +1275,10 @@ alloc_tcb(int pid, int command_options_parsed)
|
|||||||
for (i = 0; i < tcbtabsize; i++) {
|
for (i = 0; i < tcbtabsize; i++) {
|
||||||
tcp = tcbtab[i];
|
tcp = tcbtab[i];
|
||||||
if ((tcp->flags & TCB_INUSE) == 0) {
|
if ((tcp->flags & TCB_INUSE) == 0) {
|
||||||
|
memset(tcp, 0, sizeof(*tcp));
|
||||||
tcp->pid = pid;
|
tcp->pid = pid;
|
||||||
tcp->parent = NULL;
|
|
||||||
#ifdef TCB_CLONE_THREAD
|
|
||||||
tcp->nclone_threads = 0;
|
|
||||||
#endif
|
|
||||||
tcp->flags = TCB_INUSE | TCB_STARTUP;
|
tcp->flags = TCB_INUSE | TCB_STARTUP;
|
||||||
tcp->outf = outf; /* Initialise to current out file */
|
tcp->outf = outf; /* Initialise to current out file */
|
||||||
tcp->curcol = 0;
|
|
||||||
tcp->stime.tv_sec = 0;
|
|
||||||
tcp->stime.tv_usec = 0;
|
|
||||||
tcp->pfd = -1;
|
tcp->pfd = -1;
|
||||||
nprocs++;
|
nprocs++;
|
||||||
if (command_options_parsed)
|
if (command_options_parsed)
|
||||||
@ -1298,9 +1286,7 @@ alloc_tcb(int pid, int command_options_parsed)
|
|||||||
return tcp;
|
return tcp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fprintf(stderr, "%s: bug in alloc_tcb\n", progname);
|
error_msg_and_die("bug in alloc_tcb");
|
||||||
cleanup();
|
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_PROCFS
|
#ifdef USE_PROCFS
|
||||||
|
Loading…
Reference in New Issue
Block a user