summaryrefslogtreecommitdiffstats
path: root/runtime/stpd/librelay.c
diff options
context:
space:
mode:
authorhunt <hunt>2005-08-24 04:41:41 +0000
committerhunt <hunt>2005-08-24 04:41:41 +0000
commitdbaa3a2282ae75c6b530cbb0b32d874838885563 (patch)
treee969208d6f4b320f1213856b75dc3ec3a6a714d9 /runtime/stpd/librelay.c
parent4fa7b22bae39812be5a72bc87daf4db2ca2e6284 (diff)
downloadsystemtap-steved-dbaa3a2282ae75c6b530cbb0b32d874838885563.tar.gz
systemtap-steved-dbaa3a2282ae75c6b530cbb0b32d874838885563.tar.xz
systemtap-steved-dbaa3a2282ae75c6b530cbb0b32d874838885563.zip
2005-08-23 Martin Hunt <hunt@redhat.com>
* librelay.c (read_last_buffers): New function. Directly grab the last buffers. (info_pending): Deleted. (request_last_buffers): Deleted.
Diffstat (limited to 'runtime/stpd/librelay.c')
-rw-r--r--runtime/stpd/librelay.c60
1 files changed, 22 insertions, 38 deletions
diff --git a/runtime/stpd/librelay.c b/runtime/stpd/librelay.c
index 4bb1739f..b265d0bc 100644
--- a/runtime/stpd/librelay.c
+++ b/runtime/stpd/librelay.c
@@ -75,7 +75,6 @@ static int relay_file[NR_CPUS];
static FILE *percpu_tmpfile[NR_CPUS];
static char *relay_buffer[NR_CPUS];
static pthread_t reader[NR_CPUS];
-static int pending_info[NR_CPUS];
/* control channel */
static int control_channel;
@@ -274,26 +273,6 @@ static int kill_percpu_threads(int n)
}
/**
- * request_last_buffers - request end-of-trace last buffer processing
- *
- * Returns 0 if successful, negative otherwise
- */
-static int request_last_buffers(void)
-{
-#if 0
- int cpu;
- for (cpu = 0; cpu < ncpus; cpu++) {
- if (send_request(STP_BUF_INFO, &cpu, sizeof(cpu)) < 0) {
- fprintf(stderr, "WARNING: couldn't request last buffers for cpu %d\n", cpu);
- return -1;
- }
- pending_info[cpu]++;
- }
-#endif
- return 0;
-}
-
-/**
* process_subbufs - write ready subbufs to disk
*/
static int process_subbufs(struct buf_info *info)
@@ -365,6 +344,27 @@ static void *reader_thread(void *data)
} while (1);
}
+static void read_last_buffers(void)
+{
+ int cpu, rc;
+ struct consumed_info consumed_info;
+ unsigned subbufs_consumed;
+
+ for (cpu = 0; cpu < ncpus; cpu++) {
+ rc = read (proc_file[cpu], &status[cpu].info, sizeof(struct buf_info));
+ subbufs_consumed = process_subbufs(&status[cpu].info);
+ if (subbufs_consumed) {
+ if (subbufs_consumed > status[cpu].max_backlog)
+ status[cpu].max_backlog = subbufs_consumed;
+ status[cpu].info.consumed += subbufs_consumed;
+ consumed_info.cpu = cpu;
+ consumed_info.consumed = subbufs_consumed;
+ if (write (proc_file[cpu], &consumed_info, sizeof(struct consumed_info)) < 0)
+ fprintf(stderr,"WARNING: writing consumed info failed.\n");
+ }
+ }
+}
+
/**
* init_relayfs - create files and threads for relayfs processing
*
@@ -547,17 +547,6 @@ static int merge_output(void)
return 0;
}
-static int info_pending(void)
-{
- int i;
-
- for (i = 0; i < ncpus; i++)
- if (pending_info[i])
- return 1;
-
- return 0;
-}
-
static void cleanup_and_exit (int closed)
{
char tmpbuf[128];
@@ -571,16 +560,11 @@ static void cleanup_and_exit (int closed)
if (transport_mode == STP_TRANSPORT_RELAYFS) {
kill_percpu_threads(ncpus);
- if (request_last_buffers() < 0)
- exit(1);
+ read_last_buffers();
}
close_proc_files();
-
- if ( transport_mode == STP_TRANSPORT_RELAYFS && info_pending())
- return;
-
if (print_totals && verbose)
summarize();