| .. | .. |
|---|
| 295 | 295 | return (struct evsel_script *)evsel->priv; |
|---|
| 296 | 296 | } |
|---|
| 297 | 297 | |
|---|
| 298 | | -static struct evsel_script *perf_evsel_script__new(struct evsel *evsel, |
|---|
| 299 | | - struct perf_data *data) |
|---|
| 298 | +static struct evsel_script *evsel_script__new(struct evsel *evsel, struct perf_data *data) |
|---|
| 300 | 299 | { |
|---|
| 301 | 300 | struct evsel_script *es = zalloc(sizeof(*es)); |
|---|
| 302 | 301 | |
|---|
| .. | .. |
|---|
| 316 | 315 | return NULL; |
|---|
| 317 | 316 | } |
|---|
| 318 | 317 | |
|---|
| 319 | | -static void perf_evsel_script__delete(struct evsel_script *es) |
|---|
| 318 | +static void evsel_script__delete(struct evsel_script *es) |
|---|
| 320 | 319 | { |
|---|
| 321 | 320 | zfree(&es->filename); |
|---|
| 322 | 321 | fclose(es->fp); |
|---|
| .. | .. |
|---|
| 324 | 323 | free(es); |
|---|
| 325 | 324 | } |
|---|
| 326 | 325 | |
|---|
| 327 | | -static int perf_evsel_script__fprintf(struct evsel_script *es, FILE *fp) |
|---|
| 326 | +static int evsel_script__fprintf(struct evsel_script *es, FILE *fp) |
|---|
| 328 | 327 | { |
|---|
| 329 | 328 | struct stat st; |
|---|
| 330 | 329 | |
|---|
| .. | .. |
|---|
| 2147 | 2146 | return 0; |
|---|
| 2148 | 2147 | } |
|---|
| 2149 | 2148 | |
|---|
| 2149 | +// Used when scr->per_event_dump is not set |
|---|
| 2150 | +static struct evsel_script es_stdout; |
|---|
| 2151 | + |
|---|
| 2150 | 2152 | static int process_attr(struct perf_tool *tool, union perf_event *event, |
|---|
| 2151 | 2153 | struct evlist **pevlist) |
|---|
| 2152 | 2154 | { |
|---|
| .. | .. |
|---|
| 2155 | 2157 | struct evsel *evsel, *pos; |
|---|
| 2156 | 2158 | u64 sample_type; |
|---|
| 2157 | 2159 | int err; |
|---|
| 2158 | | - static struct evsel_script *es; |
|---|
| 2159 | 2160 | |
|---|
| 2160 | 2161 | err = perf_event__process_attr(tool, event, pevlist); |
|---|
| 2161 | 2162 | if (err) |
|---|
| .. | .. |
|---|
| 2165 | 2166 | evsel = evlist__last(*pevlist); |
|---|
| 2166 | 2167 | |
|---|
| 2167 | 2168 | if (!evsel->priv) { |
|---|
| 2168 | | - if (scr->per_event_dump) { |
|---|
| 2169 | | - evsel->priv = perf_evsel_script__new(evsel, |
|---|
| 2170 | | - scr->session->data); |
|---|
| 2171 | | - } else { |
|---|
| 2172 | | - es = zalloc(sizeof(*es)); |
|---|
| 2173 | | - if (!es) |
|---|
| 2169 | + if (scr->per_event_dump) { |
|---|
| 2170 | + evsel->priv = evsel_script__new(evsel, scr->session->data); |
|---|
| 2171 | + if (!evsel->priv) |
|---|
| 2174 | 2172 | return -ENOMEM; |
|---|
| 2175 | | - es->fp = stdout; |
|---|
| 2176 | | - evsel->priv = es; |
|---|
| 2173 | + } else { // Replicate what is done in perf_script__setup_per_event_dump() |
|---|
| 2174 | + es_stdout.fp = stdout; |
|---|
| 2175 | + evsel->priv = &es_stdout; |
|---|
| 2177 | 2176 | } |
|---|
| 2178 | 2177 | } |
|---|
| 2179 | 2178 | |
|---|
| .. | .. |
|---|
| 2422 | 2421 | evlist__for_each_entry(evlist, evsel) { |
|---|
| 2423 | 2422 | if (!evsel->priv) |
|---|
| 2424 | 2423 | break; |
|---|
| 2425 | | - perf_evsel_script__delete(evsel->priv); |
|---|
| 2424 | + evsel_script__delete(evsel->priv); |
|---|
| 2426 | 2425 | evsel->priv = NULL; |
|---|
| 2427 | 2426 | } |
|---|
| 2428 | 2427 | } |
|---|
| .. | .. |
|---|
| 2442 | 2441 | if (evsel->priv != NULL) |
|---|
| 2443 | 2442 | continue; |
|---|
| 2444 | 2443 | |
|---|
| 2445 | | - evsel->priv = perf_evsel_script__new(evsel, script->session->data); |
|---|
| 2444 | + evsel->priv = evsel_script__new(evsel, script->session->data); |
|---|
| 2446 | 2445 | if (evsel->priv == NULL) |
|---|
| 2447 | 2446 | goto out_err_fclose; |
|---|
| 2448 | 2447 | } |
|---|
| .. | .. |
|---|
| 2457 | 2456 | static int perf_script__setup_per_event_dump(struct perf_script *script) |
|---|
| 2458 | 2457 | { |
|---|
| 2459 | 2458 | struct evsel *evsel; |
|---|
| 2460 | | - static struct evsel_script es_stdout; |
|---|
| 2461 | 2459 | |
|---|
| 2462 | 2460 | if (script->per_event_dump) |
|---|
| 2463 | 2461 | return perf_script__fopen_per_event_dump(script); |
|---|
| .. | .. |
|---|
| 2477 | 2475 | evlist__for_each_entry(script->session->evlist, evsel) { |
|---|
| 2478 | 2476 | struct evsel_script *es = evsel->priv; |
|---|
| 2479 | 2477 | |
|---|
| 2480 | | - perf_evsel_script__fprintf(es, stdout); |
|---|
| 2481 | | - perf_evsel_script__delete(es); |
|---|
| 2478 | + evsel_script__fprintf(es, stdout); |
|---|
| 2479 | + evsel_script__delete(es); |
|---|
| 2482 | 2480 | evsel->priv = NULL; |
|---|
| 2483 | 2481 | } |
|---|
| 2484 | 2482 | } |
|---|