tuna: Fix race in is_hardirq_handler
It is better to try accessing the fields catching exceptions, as just
checking if we have that key is not enough for, right after, that thread
having gone away and the populating of that dict entry not finding the
file on /proc/PID/.
Signed-off-by: Arnaldo Carvalho de Melo <acme@felicio.ghostprotocols.net>
diff --git a/tuna/tuna.py b/tuna/tuna.py
index 6cd6bdd..3c30f03 100755
--- a/tuna/tuna.py
+++ b/tuna/tuna.py
@@ -166,10 +166,11 @@
# FIXME: move to python-linux-procfs
def is_hardirq_handler(self, pid):
PF_HARDIRQ = 0x08000000
- if not self.processes.has_key(pid):
+ try:
+ return int(self.processes[pid]["stat"]["flags"]) & \
+ PF_HARDIRQ and True or False
+ except:
return False
- return int(self.processes[pid]["stat"]["flags"]) & \
- PF_HARDIRQ and True or False
# FIXME: move to python-linux-procfs
def cannot_set_affinity(self, pid):