This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
Re: Updating from 0303 to 0505 has problems
On Sun, May 13, 2007 at 12:02:54AM -0500, Quentin Barnes wrote:
On Thu, May 10, 2007 at 01:28:44AM -0400, Martin Hunt wrote:
On Wed, 2007-05-09 at 22:22 -0500, Quentin Barnes wrote:
The problem is the "poll warning: Interrupted system call"
diagnostic message from staprun that's throwing off expect. Below
is a patch that fixes this problem for this message. Now whether
this is a fix or a workaround I don't know. There are two possible
fixes: 1) change stap_run.exp to account for the extra diagnostic,
2) change staprun's reader_thread() not to generate the diagnostic
in the first place. I chose the former for this patch. Which
approach would be the better fix?
I think I checked in a fix to this a few days ago. Certainly that error
message no longer is in the sources. Of course, there could be new
problems now... Could you give either the current CVS version a try or a
snapshot from May 8 or later?
I tried it with the 0512 snapshot and it still has problems.
Running it with add.stp:
====================
# staprun .systemtap/cache/51/stap_51971f530865fabd17b2f297433cc8f6_473.ko
systemtap starting probe
[pressed ^C here]
#
====================
After I pressed ^C there should have been the additional messages:
====================
systemtap ending probe
systemtap test success
====================
But there was nothing. It just exited. This is now also causing
a lot of "eof" failures with the test suite since those messages
are lost.
I played some and found the change below fixed losing the post
interrupt messages. Whether it is a hack workaround or a real fix,
I don't know the code well enough to know. So far, this also seemed
to fix many of the "eof" failures.
--- runtime/staprun/Orig/relay.c 2007-05-12 13:17:34.000000000 -0500
+++ runtime/staprun/relay.c 2007-05-13 18:08:13.000000000 -0500
@@ -76,7 +76,6 @@ static void *reader_thread(void *data)
fprintf(stderr, "poll error: %s\n",strerror(errno));
pthread_exit(NULL);
}
- stop_threads = 1;
}
while ((rc = read(relay_fd[cpu], buf, sizeof(buf))) > 0) {
if (write(out_fd[cpu], buf, rc) != rc) {