ustat: added basic race condition protection (#2103)
added basic race condition protection for ustat.py
diff --git a/tools/lib/ustat.py b/tools/lib/ustat.py
index 3661a14..1edc985 100755
--- a/tools/lib/ustat.py
+++ b/tools/lib/ustat.py
@@ -20,8 +20,9 @@
from __future__ import print_function
import argparse
-from bcc import BPF, USDT
+from bcc import BPF, USDT, USDTException
import os
+import sys
from subprocess import call
from time import sleep, strftime
@@ -62,7 +63,12 @@
def _enable_probes(self):
self.usdts = []
for pid in self.targets:
- usdt = USDT(pid=pid)
+ try:
+ usdt = USDT(pid=pid)
+ except USDTException:
+ # avoid race condition on pid going away.
+ print("failed to instrument %d" % pid, file=sys.stderr)
+ continue
for event in self.events:
try:
usdt.enable_probe(event, "%s_%s" % (self.language, event))
@@ -111,6 +117,9 @@
for event, category in self.events.items():
counts = bpf["%s_%s_counts" % (self.language, event)]
for pid, count in counts.items():
+ if pid.value not in result:
+ print("result was not found for %d" % pid.value, file=sys.stderr)
+ continue
result[pid.value][category] = count.value
counts.clear()
return result