On Thu, 18 Mar 2021, Federico Pellegrin wrote:
-) The used signal Gdk.INPUT_READ is not valid, replaced therefore
with GObject.IO_IN. This restores the functionality.
-) Added a try/catch to prevent exceptions being thrown for processes
that go away fast (they are there when event arrives but are already
gone by the time the UI processing code is going through them)
Signed-off-by: Federico Pellegrin <fede(a)evolware.org>
---
tuna/gui/procview.py | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/tuna/gui/procview.py b/tuna/gui/procview.py
index bbe14b6..199a4f1 100755
--- a/tuna/gui/procview.py
+++ b/tuna/gui/procview.py
@@ -329,10 +329,14 @@ class procview:
except: # short lived thread
pass
else:
- try:
-
self.ps.processes[event.pid].threads.processes[event.tid] = procfs.process(event.tid)
- except AttributeError:
- self.ps.processes[event.pid].threads =
procfs.pidstats("/proc/%d/task/" % event.pid)
+ if event.pid in self.ps.processes:
+ try:
+
self.ps.processes[event.pid].threads.processes[event.tid] = procfs.process(event.tid)
+ except (AttributeError, KeyError):
+ try:
+ self.ps.processes[event.pid].threads =
procfs.pidstats("/proc/%d/task/" % event.pid)
+ except:
+ pass
elif event.type == perf.RECORD_EXIT:
del self.ps[int(event.tid)]
elif event.type == perf.RECORD_SAMPLE:
@@ -356,7 +360,7 @@ class procview:
self.evlist.mmap()
self.pollfd = self.evlist.get_pollfd()
for f in self.pollfd:
- GObject.io_add_watch(f, Gdk.INPUT_READ, self.perf_process_events)
+ GObject.io_add_watch(f, GObject.IO_IN, self.perf_process_events)
self.perf_counter = {}
def on_query_tooltip(self, treeview, x, y, keyboard_mode, tooltip):
--
2.26.3
Signed-off-by: John Kacur <jkacur(a)redhat.com>