Fix: refcount issue in lttng-ust-abi.c
[lttng-ust.git] / liblttng-ust / lttng-ust-comm.c
index 1f60f86dcb4c4287b9690b7fcfd974fb960e5ab1..096a22fca27caea8297dc6484f5e354aa9ae8017 100644 (file)
@@ -393,7 +393,7 @@ int handle_message(struct sock_info *sock_info,
                if (lum->handle == LTTNG_UST_ROOT_HANDLE)
                        ret = -EPERM;
                else
-                       ret = lttng_ust_objd_unref(lum->handle);
+                       ret = lttng_ust_objd_unref(lum->handle, 1);
                break;
        case LTTNG_UST_FILTER:
        {
@@ -632,7 +632,7 @@ void cleanup_sock_info(struct sock_info *sock_info, int exiting)
                sock_info->notify_socket = -1;
        }
        if (sock_info->root_handle != -1) {
-               ret = lttng_ust_objd_unref(sock_info->root_handle);
+               ret = lttng_ust_objd_unref(sock_info->root_handle, 1);
                if (ret) {
                        ERR("Error unref root handle");
                }
@@ -926,7 +926,6 @@ restart:
        }
 
        /* Register */
-       timeout = get_notify_sock_timeout();
        for (i = 0; i < 2; i++) {
                ret = ustcomm_connect_unix_sock(sock_info->sock_path);
                if (ret < 0) {
@@ -942,33 +941,33 @@ restart:
                        goto restart;
                }
                open_sock[i] = ret;
-               if (timeout > 0) {
-                       ret = ustcomm_setsockopt_rcv_timeout(open_sock[i],
-                                       timeout);
-                       if (ret < 0) {
-                               WARN("Error setting socket receive timeout");
-                       }
-                       ret = ustcomm_setsockopt_snd_timeout(open_sock[i],
-                                       timeout);
-                       if (ret < 0) {
-                               WARN("Error setting socket send timeout");
-                       }
-               } else if (timeout == -1) {
-                       ret = fcntl(open_sock[i], F_SETFL, O_NONBLOCK);
-                       if (ret < 0) {
-                               WARN("Error setting socket to non-blocking");
-                       }
-               } else {
-                       if (timeout != 0) {
-                               WARN("Unsuppoorted timeout value %ld",
-                                       timeout);
-                       }
-               }
        }
 
        sock_info->socket = open_sock[0];
        sock_info->notify_socket = open_sock[1];
 
+       timeout = get_notify_sock_timeout();
+       if (timeout >= 0) {
+               /*
+                * Give at least 10ms to sessiond to reply to
+                * notifications.
+                */
+               if (timeout < 10)
+                       timeout = 10;
+               ret = ustcomm_setsockopt_rcv_timeout(sock_info->notify_socket,
+                               timeout);
+               if (ret < 0) {
+                       WARN("Error setting socket receive timeout");
+               }
+               ret = ustcomm_setsockopt_snd_timeout(sock_info->notify_socket,
+                               timeout);
+               if (ret < 0) {
+                       WARN("Error setting socket send timeout");
+               }
+       } else if (timeout < -1) {
+               WARN("Unsuppoorted timeout value %ld", timeout);
+       }
+
        /*
         * Create only one root handle per listener thread for the whole
         * process lifetime, so we ensure we get ID which is statically
This page took 0.023842 seconds and 4 git commands to generate.