projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: Discard disable event command filter payload
[lttng-tools.git]
/
src
/
bin
/
lttng-sessiond
/
modprobe.c
diff --git
a/src/bin/lttng-sessiond/modprobe.c
b/src/bin/lttng-sessiond/modprobe.c
index b5b9d8cb793c2d6bbffc156d0ea8f6d314a4b0c7..a7cbab287bf62a973ab871b871cade1ec7918548 100644
(file)
--- a/
src/bin/lttng-sessiond/modprobe.c
+++ b/
src/bin/lttng-sessiond/modprobe.c
@@
-141,23
+141,31
@@
void modprobe_remove_lttng_control(void)
LTTNG_MOD_REQUIRED);
}
LTTNG_MOD_REQUIRED);
}
+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();
}
/*
}
/*
@@
-351,12
+359,12
@@
static int grow_probes(void)
static int append_list_to_probes(const char *list)
{
char *next;
static int append_list_to_probes(const char *list)
{
char *next;
- int
index = nr_probes,
ret;
- char *tmp_list;
+ int ret;
+ char *tmp_list
, *cur_list
;
assert(list);
assert(list);
- tmp_list = strdup(list);
+
cur_list =
tmp_list = strdup(list);
if (!tmp_list) {
PERROR("strdup temp list");
return -ENOMEM;
if (!tmp_list) {
PERROR("strdup temp list");
return -ENOMEM;
@@
-366,11
+374,11
@@
static int append_list_to_probes(const char *list)
size_t name_len;
struct kern_modules_param *cur_mod;
size_t name_len;
struct kern_modules_param *cur_mod;
- next = strtok(
tmp
_list, ",");
+ next = strtok(
cur
_list, ",");
if (!next) {
break;
}
if (!next) {
break;
}
-
tmp
_list = NULL;
+
cur
_list = NULL;
/* filter leading spaces */
while (*next == ' ') {
/* filter leading spaces */
while (*next == ' ') {
@@
-380,33
+388,38
@@
static int append_list_to_probes(const char *list)
if (probes_capacity <= nr_probes) {
ret = grow_probes();
if (ret) {
if (probes_capacity <= nr_probes) {
ret = grow_probes();
if (ret) {
-
return ret
;
+
goto error
;
}
}
/* Length 13 is "lttng-probe-" + \0 */
name_len = strlen(next) + 13;
}
}
/* Length 13 is "lttng-probe-" + \0 */
name_len = strlen(next) + 13;
- cur_mod = &probes[
index
];
+ cur_mod = &probes[
nr_probes
];
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");
- return -ENOMEM;
+ 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");
- return -ENOMEM;
+ ret = -ENOMEM;
+ goto error;
}
}
- cur_mod++;
nr_probes++;
}
free(tmp_list);
nr_probes++;
}
free(tmp_list);
-
return 0;
return 0;
+
+error:
+ free(tmp_list);
+ free_probes();
+ return ret;
}
/*
}
/*
@@
-430,7
+443,6
@@
int modprobe_lttng_data(void)
if (list) {
/* User-specified probes. */
ret = append_list_to_probes(list);
if (list) {
/* User-specified probes. */
ret = append_list_to_probes(list);
-
if (ret) {
return ret;
}
if (ret) {
return ret;
}
@@
-451,7
+463,8
@@
int modprobe_lttng_data(void)
if (!name) {
PERROR("strdup probe item");
if (!name) {
PERROR("strdup probe item");
- return -ENOMEM;
+ ret = -ENOMEM;
+ goto error;
}
probes[i].name = name;
}
probes[i].name = name;
@@
-470,12
+483,20
@@
int modprobe_lttng_data(void)
if (list) {
ret = append_list_to_probes(list);
if (ret) {
if (list) {
ret = append_list_to_probes(list);
if (ret) {
-
return ret
;
+
goto error
;
}
}
/*
* 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;
}
}
This page took
0.026017 seconds
and
4
git commands to generate.