Skip to contentSkip to conversation

perf config: Call perf_config__init() lazily

tip:perf/core tip-bot for Arnaldo Carvalho de Melo 1 participant 1 message May 19, 2018 perf events

lore
Share & tools
lore
#0 lore raw
Commit-ID:  d01bd1ac920e98e2a64f6bb5adf907180e0aaac7
Gitweb:     https://git.kernel.org/tip/d01bd1ac920e98e2a64f6bb5adf907180e0aaac7
Author:     Arnaldo Carvalho de Melo <[email protected]>
AuthorDate: Wed, 16 May 2018 16:09:08 -0300
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Wed, 16 May 2018 16:11:09 -0300

perf config: Call perf_config__init() lazily

We check what perf_config__init() does at each perf_config() call, namely if the static perf_config instance was created, so instead of bailing out in that case, try to allocate it, bailing if it fails.

Now to get the perf_config() call out of the start of perf's main() function, doing it also lazily.

---
 tools/perf/perf.c        |  1 -
 tools/perf/util/config.c | 16 +++++++++-------
 tools/perf/util/config.h |  1 -
 3 files changed, 9 insertions(+), 9 deletions(-)
tools/perf/perf.c +0 -1
index 20a08cb32332..cd6ea55d4b0c 100644
@@ -458,7 +458,6 @@ int main(int argc, const char **argv)
 
 	srandom(time(NULL));
 
-	perf_config__init();
 	err = perf_config(perf_default_config, NULL);
 	if (err)
 		return err;
tools/perf/util/config.c +9 -7
index 84eb9393c7db..5ac157056cdf 100644
@@ -707,6 +707,14 @@ struct perf_config_set *perf_config_set__new(void)
 	return set;
 }
 
+static int perf_config__init(void)
+{
+	if (config_set == NULL)
+		config_set = perf_config_set__new();
+
+	return config_set == NULL;
+}
+
 int perf_config(config_fn_t fn, void *data)
 {
 	int ret = 0;
@@ -714,7 +722,7 @@ int perf_config(config_fn_t fn, void *data)
 	struct perf_config_section *section;
 	struct perf_config_item *item;
 
-	if (config_set == NULL)
+	if (config_set == NULL && perf_config__init())
 		return -1;
 
 	perf_config_set__for_each_entry(config_set, section, item) {
@@ -735,12 +743,6 @@ int perf_config(config_fn_t fn, void *data)
 	return ret;
 }
 
-void perf_config__init(void)
-{
-	if (config_set == NULL)
-		config_set = perf_config_set__new();
-}
-
 void perf_config__exit(void)
 {
 	perf_config_set__delete(config_set);
tools/perf/util/config.h +0 -1
index baf82bf227ac..bd0a5897c76a 100644
@@ -38,7 +38,6 @@ struct perf_config_set *perf_config_set__new(void);
 void perf_config_set__delete(struct perf_config_set *set);
 int perf_config_set__collect(struct perf_config_set *set, const char *file_name,
 			     const char *var, const char *value);
-void perf_config__init(void);
 void perf_config__exit(void);
 void perf_config__refresh(void);