|
@@ -1393,3 +1393,26 @@ int machine__resolve_callchain(struct machine *machine,
|
|
|
sample);
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+int machine__for_each_thread(struct machine *machine,
|
|
|
+ int (*fn)(struct thread *thread, void *p),
|
|
|
+ void *priv)
|
|
|
+{
|
|
|
+ struct rb_node *nd;
|
|
|
+ struct thread *thread;
|
|
|
+ int rc = 0;
|
|
|
+
|
|
|
+ for (nd = rb_first(&machine->threads); nd; nd = rb_next(nd)) {
|
|
|
+ thread = rb_entry(nd, struct thread, rb_node);
|
|
|
+ rc = fn(thread, priv);
|
|
|
+ if (rc != 0)
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+
|
|
|
+ list_for_each_entry(thread, &machine->dead_threads, node) {
|
|
|
+ rc = fn(thread, priv);
|
|
|
+ if (rc != 0)
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+ return rc;
|
|
|
+}
|