Fix: use MT-safe strtok_r in multithreaded context
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 3 Feb 2021 15:21:42 +0000 (10:21 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 3 Feb 2021 19:26:49 +0000 (14:26 -0500)
append_list_to_probes uses the non-multithread-safe "strtok" while in
multithreaded context.

It is called by modprobe_lttng_data(), which is called from
init_kernel_tracer().

init_kernel_tracer is used from main() after other threads are created,
and also from process_client_msg() when a user attempts to interact with
the kernel domain if the kernel tracer has not yet been successfully
initialized.

Fixed by using the MT-safe strtok_r() instead.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ic3f81551b8508451e0f9733c5de56a4d4407b813

src/bin/lttng-sessiond/modprobe.c

index 2f6d585d536c8d8b86f679eaa77ecdfc97ba6a6a..28385ea39e6affd19e30627b97411c8fa2817a99 100644 (file)
@@ -625,7 +625,7 @@ static int append_list_to_probes(const char *list)
 {
        char *next;
        int ret;
-       char *tmp_list, *cur_list;
+       char *tmp_list, *cur_list, *saveptr;
 
        assert(list);
 
@@ -639,7 +639,7 @@ static int append_list_to_probes(const char *list)
                size_t name_len;
                struct kern_modules_param *cur_mod;
 
-               next = strtok(cur_list, ",");
+               next = strtok_r(cur_list, ",", &saveptr);
                if (!next) {
                        break;
                }
This page took 0.032241 seconds and 4 git commands to generate.