X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-comm.c;h=8d90e2c367dafae1a88b8f077208a8fb0596e82d;hb=d61ad9ef7bc9a9650ae9e2793ff7e3afe816a670;hp=7e3bf45036d6f28741a337bd4d9004d3ae192b80;hpb=f52e590232f939bd6b5c88a483765c03e37fc733;p=lttng-ust.git diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index 7e3bf450..8d90e2c3 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -772,7 +772,7 @@ static int handle_bytecode_recv(struct sock_info *sock_info, int sock, struct ustcomm_ust_msg *lum) { - struct lttng_ust_bytecode_node *bytecode; + struct lttng_ust_bytecode_node *bytecode = NULL; enum lttng_ust_bytecode_node_type type; const struct lttng_ust_objd_ops *ops; uint32_t data_size, data_size_max, reloc_offset; @@ -829,7 +829,7 @@ int handle_bytecode_recv(struct sock_info *sock_info, switch (len) { case 0: /* orderly shutdown */ ret = 0; - goto error_free_bytecode; + goto end; default: if (len == bytecode->bc.len) { DBG("Bytecode %s data received", @@ -842,41 +842,33 @@ int handle_bytecode_recv(struct sock_info *sock_info, ERR("%s remote end closed connection", sock_info->name); ret = len; - goto error_free_bytecode; + goto end; } ret = len; - goto error_free_bytecode; + goto end; } else { DBG("Incorrect %s bytecode data message size: %zd", bytecode_type_str(lum->cmd), len); ret = -EINVAL; - goto error_free_bytecode; + goto end; } } ops = objd_ops(lum->handle); if (!ops) { ret = -ENOENT; - goto error_free_bytecode; + goto end; } - if (ops->cmd) { + if (ops->cmd) ret = ops->cmd(lum->handle, lum->cmd, - (unsigned long) bytecode, + (unsigned long) &bytecode, NULL, sock_info); - if (ret) - goto error_free_bytecode; - /* don't free bytecode if everything went fine. */ - } else { + else ret = -ENOSYS; - goto error_free_bytecode; - } - - goto end; -error_free_bytecode: - free(bytecode); end: + free(bytecode); return ret; } @@ -971,18 +963,13 @@ int handle_message(struct sock_info *sock_info, goto error; } } - if (ops->cmd) { + if (ops->cmd) ret = ops->cmd(lum->handle, lum->cmd, - (unsigned long) node, + (unsigned long) &node, &args, sock_info); - if (ret) { - free(node); - } - /* Don't free exclusion data if everything went fine. */ - } else { + else ret = -ENOSYS; - free(node); - } + free(node); break; } case LTTNG_UST_EVENT_NOTIFIER_GROUP_CREATE: @@ -1216,6 +1203,7 @@ int handle_message(struct sock_info *sock_info, &args, sock_info); else ret = -ENOSYS; + free(args.counter.counter_data); break; } case LTTNG_UST_COUNTER_GLOBAL: @@ -1233,6 +1221,16 @@ int handle_message(struct sock_info *sock_info, &args, sock_info); else ret = -ENOSYS; + if (args.counter_shm.shm_fd >= 0) { + int close_ret; + + lttng_ust_lock_fd_tracker(); + close_ret = close(args.counter_shm.shm_fd); + lttng_ust_unlock_fd_tracker(); + args.counter_shm.shm_fd = -1; + if (close_ret) + PERROR("close"); + } break; } case LTTNG_UST_COUNTER_CPU: @@ -1250,6 +1248,16 @@ int handle_message(struct sock_info *sock_info, &args, sock_info); else ret = -ENOSYS; + if (args.counter_shm.shm_fd >= 0) { + int close_ret; + + lttng_ust_lock_fd_tracker(); + close_ret = close(args.counter_shm.shm_fd); + lttng_ust_unlock_fd_tracker(); + args.counter_shm.shm_fd = -1; + if (close_ret) + PERROR("close"); + } break; } case LTTNG_UST_EVENT_NOTIFIER_CREATE: