diff options
Diffstat (limited to 'tools/perf/util/scripting-engines')
| -rw-r--r-- | tools/perf/util/scripting-engines/trace-event-perl.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/scripting-engines/trace-event-python.c | 37 | 
2 files changed, 25 insertions, 14 deletions
| diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/perf/util/scripting-engines/trace-event-perl.c index a85e4ae5f3ac..c0c9795c4f02 100644 --- a/tools/perf/util/scripting-engines/trace-event-perl.c +++ b/tools/perf/util/scripting-engines/trace-event-perl.c @@ -282,7 +282,7 @@ static void perl_process_tracepoint(union perf_event *perf_event __maybe_unused,  	event = find_cache_event(evsel);  	if (!event) -		die("ug! no event found for type %" PRIu64, evsel->attr.config); +		die("ug! no event found for type %" PRIu64, (u64)evsel->attr.config);  	pid = raw_field_value(event, "common_pid", data); diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index cc75a3cef388..95d91a0b23af 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -56,6 +56,17 @@ static void handler_call_die(const char *handler_name)  	Py_FatalError("problem in Python trace event handler");  } +/* + * Insert val into into the dictionary and decrement the reference counter. + * This is necessary for dictionaries since PyDict_SetItemString() does not  + * steal a reference, as opposed to PyTuple_SetItem(). + */ +static void pydict_set_item_string_decref(PyObject *dict, const char *key, PyObject *val) +{ +	PyDict_SetItemString(dict, key, val); +	Py_DECREF(val); +} +  static void define_value(enum print_arg_type field_type,  			 const char *ev_name,  			 const char *field_name, @@ -279,11 +290,11 @@ static void python_process_tracepoint(union perf_event *perf_event  		PyTuple_SetItem(t, n++, PyInt_FromLong(pid));  		PyTuple_SetItem(t, n++, PyString_FromString(comm));  	} else { -		PyDict_SetItemString(dict, "common_cpu", PyInt_FromLong(cpu)); -		PyDict_SetItemString(dict, "common_s", PyInt_FromLong(s)); -		PyDict_SetItemString(dict, "common_ns", PyInt_FromLong(ns)); -		PyDict_SetItemString(dict, "common_pid", PyInt_FromLong(pid)); -		PyDict_SetItemString(dict, "common_comm", PyString_FromString(comm)); +		pydict_set_item_string_decref(dict, "common_cpu", PyInt_FromLong(cpu)); +		pydict_set_item_string_decref(dict, "common_s", PyInt_FromLong(s)); +		pydict_set_item_string_decref(dict, "common_ns", PyInt_FromLong(ns)); +		pydict_set_item_string_decref(dict, "common_pid", PyInt_FromLong(pid)); +		pydict_set_item_string_decref(dict, "common_comm", PyString_FromString(comm));  	}  	for (field = event->format.fields; field; field = field->next) {  		if (field->flags & FIELD_IS_STRING) { @@ -313,7 +324,7 @@ static void python_process_tracepoint(union perf_event *perf_event  		if (handler)  			PyTuple_SetItem(t, n++, obj);  		else -			PyDict_SetItemString(dict, field->name, obj); +			pydict_set_item_string_decref(dict, field->name, obj);  	}  	if (!handler) @@ -370,21 +381,21 @@ static void python_process_general_event(union perf_event *perf_event  	if (!handler || !PyCallable_Check(handler))  		goto exit; -	PyDict_SetItemString(dict, "ev_name", PyString_FromString(perf_evsel__name(evsel))); -	PyDict_SetItemString(dict, "attr", PyString_FromStringAndSize( +	pydict_set_item_string_decref(dict, "ev_name", PyString_FromString(perf_evsel__name(evsel))); +	pydict_set_item_string_decref(dict, "attr", PyString_FromStringAndSize(  			(const char *)&evsel->attr, sizeof(evsel->attr))); -	PyDict_SetItemString(dict, "sample", PyString_FromStringAndSize( +	pydict_set_item_string_decref(dict, "sample", PyString_FromStringAndSize(  			(const char *)sample, sizeof(*sample))); -	PyDict_SetItemString(dict, "raw_buf", PyString_FromStringAndSize( +	pydict_set_item_string_decref(dict, "raw_buf", PyString_FromStringAndSize(  			(const char *)sample->raw_data, sample->raw_size)); -	PyDict_SetItemString(dict, "comm", +	pydict_set_item_string_decref(dict, "comm",  			PyString_FromString(thread->comm));  	if (al->map) { -		PyDict_SetItemString(dict, "dso", +		pydict_set_item_string_decref(dict, "dso",  			PyString_FromString(al->map->dso->name));  	}  	if (al->sym) { -		PyDict_SetItemString(dict, "symbol", +		pydict_set_item_string_decref(dict, "symbol",  			PyString_FromString(al->sym->name));  	} | 
