diff options
Diffstat (limited to 'tools/perf/util/probe-file.c')
| -rw-r--r-- | tools/perf/util/probe-file.c | 28 | 
1 files changed, 24 insertions, 4 deletions
| diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c index 5003ba403345..0f5fda11675f 100644 --- a/tools/perf/util/probe-file.c +++ b/tools/perf/util/probe-file.c @@ -301,10 +301,15 @@ int probe_file__get_events(int fd, struct strfilter *filter,  		p = strchr(ent->s, ':');  		if ((p && strfilter__compare(filter, p + 1)) ||  		    strfilter__compare(filter, ent->s)) { -			strlist__add(plist, ent->s); +			ret = strlist__add(plist, ent->s); +			if (ret == -ENOMEM) { +				pr_err("strlist__add failed with -ENOMEM\n"); +				goto out; +			}  			ret = 0;  		}  	} +out:  	strlist__delete(namelist);  	return ret; @@ -511,7 +516,11 @@ static int probe_cache__load(struct probe_cache *pcache)  				ret = -EINVAL;  				goto out;  			} -			strlist__add(entry->tevlist, buf); +			ret = strlist__add(entry->tevlist, buf); +			if (ret == -ENOMEM) { +				pr_err("strlist__add failed with -ENOMEM\n"); +				goto out; +			}  		}  	}  out: @@ -672,7 +681,12 @@ int probe_cache__add_entry(struct probe_cache *pcache,  		command = synthesize_probe_trace_command(&tevs[i]);  		if (!command)  			goto out_err; -		strlist__add(entry->tevlist, command); +		ret = strlist__add(entry->tevlist, command); +		if (ret == -ENOMEM) { +			pr_err("strlist__add failed with -ENOMEM\n"); +			goto out_err; +		} +  		free(command);  	}  	list_add_tail(&entry->node, &pcache->entries); @@ -853,9 +867,15 @@ int probe_cache__scan_sdt(struct probe_cache *pcache, const char *pathname)  			break;  		} -		strlist__add(entry->tevlist, buf); +		ret = strlist__add(entry->tevlist, buf); +  		free(buf);  		entry = NULL; + +		if (ret == -ENOMEM) { +			pr_err("strlist__add failed with -ENOMEM\n"); +			break; +		}  	}  	if (entry) {  		list_del_init(&entry->node); |