X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-comm.c;h=0cf5ecd9687536be5fc7794c4bfeb28ed135a11f;hb=101dace0dc164352c81cb347a7a0022aa84eabc6;hp=43728ff47613d2d2fb0b8e092268ea1c60243f79;hpb=6f626d284c2bb02ae8980da6e8053e191d604286;p=lttng-ust.git diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index 43728ff4..0cf5ecd9 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -535,26 +535,15 @@ int get_constructor_timeout(struct timespec *constructor_timeout) } static -void get_blocking_retry_timeout(void) +void get_allow_blocking(void) { - const char *str_blocking_retry_timeout = - lttng_getenv("LTTNG_UST_BLOCKING_RETRY_TIMEOUT"); - - if (str_blocking_retry_timeout) { - long timeout = strtol(str_blocking_retry_timeout, NULL, 10); - - if (timeout < 0) - timeout = -1; - if (timeout > INT_MAX) { - WARN("Saturating %s value from %ld to %d\n", - "LTTNG_UST_BLOCKING_RETRY_TIMEOUT", - timeout, INT_MAX); - timeout = INT_MAX; - } - DBG("%s environment variable value is %ld", - "LTTNG_UST_BLOCKING_RETRY_TIMEOUT", - timeout); - lttng_ust_ringbuffer_set_retry_timeout(timeout); + const char *str_allow_blocking = + lttng_getenv("LTTNG_UST_ALLOW_BLOCKING"); + + if (str_allow_blocking) { + DBG("%s environment variable is set", + "LTTNG_UST_ALLOW_BLOCKING"); + lttng_ust_ringbuffer_set_allow_blocking(); } } @@ -1272,7 +1261,18 @@ char *get_map_shm(struct sock_info *sock_info) lttng_ust_unlock_fd_tracker(); goto error; } - lttng_ust_add_fd_to_tracker(wait_shm_fd); + + ret = lttng_ust_add_fd_to_tracker(wait_shm_fd); + if (ret < 0) { + ret = close(wait_shm_fd); + if (!ret) { + PERROR("Error closing fd"); + } + lttng_ust_unlock_fd_tracker(); + goto error; + } + + wait_shm_fd = ret; lttng_ust_unlock_fd_tracker(); wait_shm_mmap = mmap(NULL, page_size, PROT_READ, @@ -1364,7 +1364,7 @@ static void *ust_listener_thread(void *arg) { struct sock_info *sock_info = arg; - int sock, ret, prev_connect_failed = 0, has_waited = 0; + int sock, ret, prev_connect_failed = 0, has_waited = 0, fd; long timeout; lttng_ust_fixup_tls(); @@ -1396,6 +1396,10 @@ restart: prev_connect_failed = 0; } + if (ust_lock()) { + goto quit; + } + if (sock_info->socket != -1) { /* FD tracker is updated by ustcomm_close_unix_sock() */ ret = ustcomm_close_unix_sock(sock_info->socket); @@ -1415,9 +1419,6 @@ restart: sock_info->notify_socket = -1; } - if (ust_lock()) { - goto quit; - } /* * Register. We need to perform both connect and sending @@ -1444,9 +1445,21 @@ restart: ust_unlock(); goto restart; } - lttng_ust_add_fd_to_tracker(ret); - lttng_ust_unlock_fd_tracker(); + fd = ret; + ret = lttng_ust_add_fd_to_tracker(fd); + if (ret < 0) { + ret = close(fd); + if (ret) { + PERROR("close on sock_info->socket"); + } + ret = -1; + lttng_ust_unlock_fd_tracker(); + ust_unlock(); + goto quit; + } + sock_info->socket = ret; + lttng_ust_unlock_fd_tracker(); ust_unlock(); /* @@ -1515,9 +1528,22 @@ restart: ust_unlock(); goto restart; } - lttng_ust_add_fd_to_tracker(ret); - lttng_ust_unlock_fd_tracker(); + + fd = ret; + ret = lttng_ust_add_fd_to_tracker(fd); + if (ret < 0) { + ret = close(fd); + if (ret) { + PERROR("close on sock_info->notify_socket"); + } + ret = -1; + lttng_ust_unlock_fd_tracker(); + ust_unlock(); + goto quit; + } + sock_info->notify_socket = ret; + lttng_ust_unlock_fd_tracker(); ust_unlock(); /* @@ -1698,7 +1724,7 @@ void __attribute__((constructor)) lttng_ust_init(void) timeout_mode = get_constructor_timeout(&constructor_timeout); - get_blocking_retry_timeout(); + get_allow_blocking(); ret = sem_init(&constructor_wait, 0, 0); if (ret) {