Fix strace flow control and data extraction issues
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 4 Feb 2016 18:34:11 +0000 (13:34 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 4 Feb 2016 22:39:26 +0000 (17:39 -0500)
commitee3ffdffd8a7edb389773b176d10e86f30d746c1
tree214616224195efda5b25cbedee82aeb7d11f4e85
parentbfb0d81b428f9ca3917846177e70cc12e402c187
Fix strace flow control and data extraction issues

There were a few issues.

- Using qwrite() was causing us to block at a bad time.  Using qiwrite()
  won't block, but it also won't do any flow control.  Instead, we do our
own flow control.  Note that we only check on the trace before the syscall.
If we have a start entry, we should have an exit entry, regardless of the
queue size.

- When we procread(), we were grabbing a reference on the proc.  However,
  if the process already exited, then we'd fail.  This prevented us from
draining the queue after the hangup.

- We drop traces.  Now we report the numbers.  If your console is slow, try
  redirecting to a file (e.g. strace foo 2> trace_file).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/drivers/dev/proc.c
kern/include/syscall.h
kern/src/syscall.c
tests/strace.c