diff options
author | Steven Rostedt <srostedt@redhat.com> | 2010-06-08 20:04:22 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-06-08 20:06:46 -0400 |
commit | 58f367f42eb159e8d3b1d0c07252aa6a0ce63a9c (patch) | |
tree | 626d6c1e51966ff37646f5ced7bbdbde623539ff | |
parent | ab08efc4cfe5a8d2c29eb0b4e1a9faa11da3060d (diff) |
trace-cmd: Revert need to free peek event
Freeing records that were returned via "peek event" made things
a bit more complex. Since the original code was written to determine
that peek events should not be freed.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | trace-ftrace.c | 9 | ||||
-rw-r--r-- | trace-input.c | 24 | ||||
-rw-r--r-- | trace-plot-cpu.c | 2 |
3 files changed, 12 insertions, 23 deletions
diff --git a/trace-ftrace.c b/trace-ftrace.c index 7cd5032..af9ac8d 100644 --- a/trace-ftrace.c +++ b/trace-ftrace.c | |||
@@ -255,13 +255,8 @@ fgraph_ent_handler(struct trace_seq *s, struct record *record, | |||
255 | return trace_seq_putc(s, '!'); | 255 | return trace_seq_putc(s, '!'); |
256 | 256 | ||
257 | rec = tracecmd_peek_data(tracecmd_curr_thread_handle, cpu); | 257 | rec = tracecmd_peek_data(tracecmd_curr_thread_handle, cpu); |
258 | if (rec) { | 258 | if (rec) |
259 | struct record *tmp; | 259 | rec = get_return_for_leaf(s, cpu, pid, val, rec); |
260 | |||
261 | tmp = get_return_for_leaf(s, cpu, pid, val, rec); | ||
262 | free_record(rec); | ||
263 | rec = tmp; | ||
264 | } | ||
265 | 260 | ||
266 | if (rec) { | 261 | if (rec) { |
267 | /* | 262 | /* |
diff --git a/trace-input.c b/trace-input.c index 3a70aec..5e92cb3 100644 --- a/trace-input.c +++ b/trace-input.c | |||
@@ -664,6 +664,9 @@ void free_record(struct record *record) | |||
664 | die("record ref count is zero!"); | 664 | die("record ref count is zero!"); |
665 | 665 | ||
666 | record->ref_count--; | 666 | record->ref_count--; |
667 | |||
668 | if (record->ref_count) | ||
669 | breakpoint(); | ||
667 | if (record->ref_count) | 670 | if (record->ref_count) |
668 | return; | 671 | return; |
669 | 672 | ||
@@ -910,14 +913,12 @@ peek_event(struct tracecmd_input *handle, unsigned long long offset, | |||
910 | * tracecmd_read_at. | 913 | * tracecmd_read_at. |
911 | */ | 914 | */ |
912 | update_page_info(handle, cpu); | 915 | update_page_info(handle, cpu); |
913 | free_next(handle, cpu); | ||
914 | 916 | ||
915 | do { | 917 | do { |
918 | free_next(handle, cpu); | ||
916 | record = tracecmd_peek_data(handle, cpu); | 919 | record = tracecmd_peek_data(handle, cpu); |
917 | if (record && (record->offset + record->record_size) > offset) | 920 | if (record && (record->offset + record->record_size) > offset) |
918 | break; | 921 | break; |
919 | free_record(record); | ||
920 | free_next(handle, cpu); | ||
921 | } while (record); | 922 | } while (record); |
922 | 923 | ||
923 | return record; | 924 | return record; |
@@ -930,10 +931,8 @@ read_event(struct tracecmd_input *handle, unsigned long long offset, | |||
930 | struct record *record; | 931 | struct record *record; |
931 | 932 | ||
932 | record = peek_event(handle, offset, cpu); | 933 | record = peek_event(handle, offset, cpu); |
933 | if (record) { | 934 | if (record) |
934 | free_record(record); | ||
935 | record = tracecmd_read_data(handle, cpu); | 935 | record = tracecmd_read_data(handle, cpu); |
936 | } | ||
937 | return record; | 936 | return record; |
938 | } | 937 | } |
939 | 938 | ||
@@ -1314,7 +1313,7 @@ int tracecmd_set_cursor(struct tracecmd_input *handle, | |||
1314 | if (get_page(handle, cpu, page_offset) < 0) | 1313 | if (get_page(handle, cpu, page_offset) < 0) |
1315 | return -1; | 1314 | return -1; |
1316 | 1315 | ||
1317 | free_record(peek_event(handle, offset, cpu)); | 1316 | peek_event(handle, offset, cpu); |
1318 | 1317 | ||
1319 | return 0; | 1318 | return 0; |
1320 | } | 1319 | } |
@@ -1491,10 +1490,8 @@ tracecmd_peek_data(struct tracecmd_input *handle, int cpu) | |||
1491 | if (!record->data) | 1490 | if (!record->data) |
1492 | die("Something freed the record"); | 1491 | die("Something freed the record"); |
1493 | 1492 | ||
1494 | if (handle->cpu_data[cpu].timestamp == record->ts) { | 1493 | if (handle->cpu_data[cpu].timestamp == record->ts) |
1495 | record->ref_count++; | ||
1496 | return record; | 1494 | return record; |
1497 | } | ||
1498 | 1495 | ||
1499 | /* | 1496 | /* |
1500 | * The timestamp changed, which means the cached | 1497 | * The timestamp changed, which means the cached |
@@ -1567,7 +1564,7 @@ read_again: | |||
1567 | record->data = ptr; | 1564 | record->data = ptr; |
1568 | record->offset = handle->cpu_data[cpu].offset + index; | 1565 | record->offset = handle->cpu_data[cpu].offset + index; |
1569 | record->missed_events = missed_events; | 1566 | record->missed_events = missed_events; |
1570 | record->ref_count = 2; /* will be returned and stored in page */ | 1567 | record->ref_count = 1; |
1571 | record->locked = 1; | 1568 | record->locked = 1; |
1572 | 1569 | ||
1573 | ptr += length; | 1570 | ptr += length; |
@@ -1599,10 +1596,8 @@ tracecmd_read_data(struct tracecmd_input *handle, int cpu) | |||
1599 | 1596 | ||
1600 | record = tracecmd_peek_data(handle, cpu); | 1597 | record = tracecmd_peek_data(handle, cpu); |
1601 | handle->cpu_data[cpu].next = NULL; | 1598 | handle->cpu_data[cpu].next = NULL; |
1602 | if (record) { | 1599 | if (record) |
1603 | record->ref_count--; | ||
1604 | record->locked = 0; | 1600 | record->locked = 0; |
1605 | } | ||
1606 | 1601 | ||
1607 | return record; | 1602 | return record; |
1608 | } | 1603 | } |
@@ -1644,7 +1639,6 @@ tracecmd_read_next_data(struct tracecmd_input *handle, int *rec_cpu) | |||
1644 | ts = record->ts; | 1639 | ts = record->ts; |
1645 | next = cpu; | 1640 | next = cpu; |
1646 | } | 1641 | } |
1647 | free_record(record); | ||
1648 | } | 1642 | } |
1649 | 1643 | ||
1650 | if (next >= 0) { | 1644 | if (next >= 0) { |
diff --git a/trace-plot-cpu.c b/trace-plot-cpu.c index fdfbdf7..50d720b 100644 --- a/trace-plot-cpu.c +++ b/trace-plot-cpu.c | |||
@@ -137,7 +137,7 @@ static int cpu_plot_display_last_event(struct graph_info *ginfo, | |||
137 | record = tracecmd_peek_data(ginfo->handle, cpu); | 137 | record = tracecmd_peek_data(ginfo->handle, cpu); |
138 | if (record) | 138 | if (record) |
139 | offset = record->offset; | 139 | offset = record->offset; |
140 | free_record(record); | 140 | /* Don't need to free a peek */ |
141 | 141 | ||
142 | tracecmd_set_cpu_to_timestamp(ginfo->handle, cpu, time); | 142 | tracecmd_set_cpu_to_timestamp(ginfo->handle, cpu, time); |
143 | 143 | ||