On Mon, Mar 11, 2019 at 10:30:42PM -0700, Song Liu wrote: SNIP > +/* purge data in bpf_progs.infos tree */ > +static void perf_env__purge_bpf(struct perf_env *env) > +{ > + struct rb_root *root; > + struct rb_node *next; > + > + down_write(&env->bpf_progs.lock); > + > + root = &env->bpf_progs.infos; > + next = rb_first(root); > + > + while (next) { > + struct bpf_prog_info_node *node; > + > + node = rb_entry(next, struct bpf_prog_info_node, rb_node); > + next = rb_next(&node->rb_node); > + rb_erase(&node->rb_node, root); > + free(node); > + } env->bpf_progs.infos_cnt = 0; ? but it's probably not needed given the current usage jirka > + up_write(&env->bpf_progs.lock); > +} SNIP