Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
+static void free_probes(void)
+{
+ int i;
+
+ if (!probes) {
+ return;
+ }
+ for (i = 0; i < nr_probes; ++i) {
+ free(probes[i].name);
+ }
+ free(probes);
+ probes = NULL;
+ nr_probes = 0;
+}
+
/*
* Remove data kernel modules in reverse load order.
*/
void modprobe_remove_lttng_data(void)
{
/*
* Remove data kernel modules in reverse load order.
*/
void modprobe_remove_lttng_data(void)
{
- int i;
-
- if (probes) {
- modprobe_remove_lttng(probes, nr_probes, LTTNG_MOD_OPTIONAL);
-
- for (i = 0; i < nr_probes; ++i) {
- free(probes[i].name);
- }
-
- free(probes);
- probes = NULL;
+ if (!probes) {
+ return;
+ modprobe_remove_lttng(probes, nr_probes, LTTNG_MOD_OPTIONAL);
+ free_probes();
if (probes_capacity <= nr_probes) {
ret = grow_probes();
if (ret) {
if (probes_capacity <= nr_probes) {
ret = grow_probes();
if (ret) {
cur_mod->name = zmalloc(name_len);
if (!cur_mod->name) {
PERROR("malloc probe list");
cur_mod->name = zmalloc(name_len);
if (!cur_mod->name) {
PERROR("malloc probe list");
+ ret = -ENOMEM;
+ goto error;
}
ret = snprintf(cur_mod->name, name_len, "lttng-probe-%s", next);
if (ret < 0) {
PERROR("snprintf modprobe name");
}
ret = snprintf(cur_mod->name, name_len, "lttng-probe-%s", next);
if (ret < 0) {
PERROR("snprintf modprobe name");
+ ret = -ENOMEM;
+ goto error;
+
+error:
+ free(tmp_list);
+ free_probes();
+ return ret;
if (list) {
/* User-specified probes. */
ret = append_list_to_probes(list);
if (list) {
/* User-specified probes. */
ret = append_list_to_probes(list);
if (!name) {
PERROR("strdup probe item");
if (!name) {
PERROR("strdup probe item");
+ ret = -ENOMEM;
+ goto error;
if (list) {
ret = append_list_to_probes(list);
if (ret) {
if (list) {
ret = append_list_to_probes(list);
if (ret) {
}
}
/*
* Load probes modules now.
*/
}
}
/*
* Load probes modules now.
*/
- return modprobe_lttng(probes, nr_probes, LTTNG_MOD_OPTIONAL);
+ ret = modprobe_lttng(probes, nr_probes, LTTNG_MOD_OPTIONAL);
+ if (ret) {
+ goto error;
+ }
+ return ret;
+
+error:
+ free_probes();
+ return ret;