Package: python3-babeltrace
Version: 1.5.6-2
Severity: important

While investigating why I was getting a segfault while processing a CTF trace 
(in which I
do a first pass extracting some info, before a second pass plotting the data...
while keeping a ref to various events to avoid making copies of everything in
the first pass), I finally understand that even though we get individual python 
handles
for all events, they get clobbered by further event parsing.


This script:

----->8------
#!/usr/bin/env python3
import babeltrace
import sys

trace_collection = babeltrace.TraceCollection()
trace_collection.add_traces_recursive(sys.argv[1], 'ctf')

mylist = []
for event in trace_collection.events:
    print(event, event.timestamp)
    mylist.append(event)

print("====")

for event in mylist:
    print(event, event.timestamp)
----->8------

shows:

<babeltrace.babeltrace.Event object at 0x7f0a0e727550> 1555157078087460409
<babeltrace.babeltrace.Event object at 0x7f0a0e7278d0> 1555157078447798861
<babeltrace.babeltrace.Event object at 0x7f0a0e727908> 1555157079242934356
...
<babeltrace.babeltrace.Event object at 0x7f0a0dfee320> 1555157103166619955
<babeltrace.babeltrace.Event object at 0x7f0a0dfee6a0> 1555157103183287540
<babeltrace.babeltrace.Event object at 0x7f0a0dfeea20> 1555157103200021333
====
<babeltrace.babeltrace.Event object at 0x7f0a0e727550> 1555157103200021333
<babeltrace.babeltrace.Event object at 0x7f0a0e7278d0> 1555157103200021333
<babeltrace.babeltrace.Event object at 0x7f0a0e727908> 1555157103200021333
...
<babeltrace.babeltrace.Event object at 0x7f0a0dfee320> 1555157103200021333
<babeltrace.babeltrace.Event object at 0x7f0a0dfee6a0> 1555157103200021333
<babeltrace.babeltrace.Event object at 0x7f0a0dfeea20> 1555157103200021333



Something feels Just Wrong here, and I somehow feel it could be linked to my 
script seeing, while
attempting to access fields of Event objects after keeping a ref to them:

=====
$ gdb --args python3 ../scripts/graph-lttstats.py .../ust/
(gdb) r
...

Program received signal SIGSEGV, Segmentation fault.
bt_ctf_get_top_level_scope (ctf_event=ctf_event@entry=0xa64188, 
scope=BT_EVENT_FIELDS) at events.c:89
89      events.c: No such file or directory.
(gdb) directory /home/yann/soft/babeltrace/babeltrace-1.5.6/formats/ctf
Source directories searched: 
/home/yann/soft/babeltrace/babeltrace-1.5.6/formats/ctf:$cdir:$cwd
(gdb) l
84              case BT_EVENT_CONTEXT:
85                      if (event->event_context)
86                              tmp = &event->event_context->p;
87                      break;
88              case BT_EVENT_FIELDS:
89                      if (event->event_fields)
90                              tmp = &event->event_fields->p;
91                      break;
92              }
93              return tmp;
(gdb) p event
$1 = (const struct ctf_event_definition *) 0x5f2f64616f6c6e79
(gdb) p* ctf_event
$2 = {parent = 0x5f2f64616f6c6e79}
(gdb) p* ctf_event->parent
Cannot access memory at address 0x5f2f64616f6c6e79
=====

Reply via email to