Fix: honor negative (unlimited) app socket timeout
[lttng-tools.git] / src / bin / lttng-sessiond / main.c
index 8890b52f4a1666666f987633a67a4097aec953c3..fb659b7e02d31a21168dfda4c15332fb8486514f 100644 (file)
@@ -37,6 +37,7 @@
 #include <sys/wait.h>
 #include <urcu/uatomic.h>
 #include <unistd.h>
+#include <ctype.h>
 
 #include <common/common.h>
 #include <common/compat/socket.h>
@@ -2242,10 +2243,12 @@ static void *thread_registration_apps(void *data)
                                         * lttcomm_setsockopt_snd_timeout expect msec as
                                         * parameter.
                                         */
-                                       (void) lttcomm_setsockopt_rcv_timeout(sock,
-                                                       app_socket_timeout * 1000);
-                                       (void) lttcomm_setsockopt_snd_timeout(sock,
-                                                       app_socket_timeout * 1000);
+                                       if (app_socket_timeout >= 0) {
+                                               (void) lttcomm_setsockopt_rcv_timeout(sock,
+                                                               app_socket_timeout * 1000);
+                                               (void) lttcomm_setsockopt_snd_timeout(sock,
+                                                               app_socket_timeout * 1000);
+                                       }
 
                                        /*
                                         * Set the CLOEXEC flag. Return code is useless because
@@ -3081,6 +3084,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock,
        case LTTNG_LIST_EVENTS:
        case LTTNG_LIST_SYSCALLS:
        case LTTNG_LIST_TRACKER_PIDS:
+       case LTTNG_DATA_PENDING:
                break;
        default:
                /* Setup lttng message with no payload */
@@ -4819,7 +4823,7 @@ static int set_option(int opt, const char *arg, const char *optname)
                if (arg) {
                        opt_verbose_consumer = config_parse_value(arg);
                } else {
-                       opt_verbose_consumer += 1;
+                       opt_verbose_consumer++;
                }
        } else if (string_match(optname, "consumerd32-path")) {
                if (!arg || *arg == '\0') {
@@ -6227,6 +6231,13 @@ exit_init_data:
        rcu_thread_offline();
        rcu_unregister_thread();
 
+       /*
+        * Ensure all prior call_rcu are done. call_rcu callbacks may push
+        * hash tables to the ht_cleanup thread. Therefore, we ensure that
+        * the queue is empty before shutting down the clean-up thread.
+        */
+       rcu_barrier();
+
        ret = notify_thread_pipe(ht_cleanup_quit_pipe[1]);
        if (ret < 0) {
                ERR("write error on ht_cleanup quit pipe");
@@ -6256,9 +6267,6 @@ exit_health_sessiond_cleanup:
 exit_create_run_as_worker_cleanup:
 
 exit_options:
-       /* Ensure all prior call_rcu are done. */
-       rcu_barrier();
-
        sessiond_cleanup_options();
 
 exit_set_signal_handler:
This page took 0.024507 seconds and 4 git commands to generate.