#include <urcu/futex.h>
#include <lttng-ust-comm.h>
+#include <ust/lttng-events.h>
#include <ust/usterr-signal-safe.h>
#include <ust/lttng-ust-abi.h>
#include <ust/tracepoint.h>
return -errno;
}
- ret = lttcomm_send_unix_sock(socket, ®_msg, sizeof(reg_msg));
+ ret = ustcomm_send_unix_sock(socket, ®_msg, sizeof(reg_msg));
if (ret >= 0 && ret != sizeof(reg_msg))
return -EIO;
- ret = fdatasync(socket);
- if (ret) {
- return -errno;
- }
return ret;
}
static
-int send_reply(int sock, struct lttcomm_ust_reply *lur)
+int send_reply(int sock, struct ustcomm_ust_reply *lur)
{
ssize_t len;
- int ret;
- len = lttcomm_send_unix_sock(sock, lur, sizeof(*lur));
+ len = ustcomm_send_unix_sock(sock, lur, sizeof(*lur));
switch (len) {
case sizeof(*lur):
DBG("message successfully sent");
- ret = fdatasync(sock);
- if (ret) {
- DBG("fdatasync error");
- return -1;
- }
return 0;
case -1:
if (errno == ECONNRESET) {
static
int handle_message(struct sock_info *sock_info,
- int sock, struct lttcomm_ust_msg *lum)
+ int sock, struct ustcomm_ust_msg *lum)
{
int ret = 0;
const struct objd_ops *ops;
- struct lttcomm_ust_reply lur;
+ struct ustcomm_ust_reply lur;
+ int shm_fd, wait_fd;
ust_lock();
lur.cmd = lum->cmd;
lur.ret_val = ret;
if (ret >= 0) {
- lur.ret_code = LTTCOMM_OK;
+ lur.ret_code = USTCOMM_OK;
} else {
- lur.ret_code = LTTCOMM_SESSION_FAIL;
+ //lur.ret_code = USTCOMM_SESSION_FAIL;
+ lur.ret_code = ret;
+ }
+ switch (lum->cmd) {
+ case LTTNG_UST_STREAM:
+ /*
+ * Special-case reply to send stream info.
+ * Use lum.u output.
+ */
+ lur.u.stream.memory_map_size = lum->u.stream.memory_map_size;
+ shm_fd = lum->u.stream.shm_fd;
+ wait_fd = lum->u.stream.wait_fd;
+ break;
+ case LTTNG_UST_METADATA:
+ case LTTNG_UST_CHANNEL:
+ lur.u.channel.memory_map_size = lum->u.channel.memory_map_size;
+ shm_fd = lum->u.channel.shm_fd;
+ wait_fd = lum->u.channel.wait_fd;
+ break;
+ case LTTNG_UST_VERSION:
+ lur.u.version = lum->u.version;
+ break;
}
ret = send_reply(sock, &lur);
+ if (ret < 0) {
+ perror("error sending reply");
+ goto error;
+ }
+ if ((lum->cmd == LTTNG_UST_STREAM
+ || lum->cmd == LTTNG_UST_CHANNEL
+ || lum->cmd == LTTNG_UST_METADATA)
+ && lur.ret_code == USTCOMM_OK) {
+ /* we also need to send the file descriptors. */
+ ret = ustcomm_send_fds_unix_sock(sock,
+ &shm_fd, &shm_fd,
+ 1, sizeof(int));
+ if (ret < 0) {
+ perror("send shm_fd");
+ goto error;
+ }
+ ret = ustcomm_send_fds_unix_sock(sock,
+ &wait_fd, &wait_fd,
+ 1, sizeof(int));
+ if (ret < 0) {
+ perror("send wait_fd");
+ goto error;
+ }
+ }
+error:
ust_unlock();
return ret;
}
}
/* Register */
- ret = lttcomm_connect_unix_sock(sock_info->sock_path);
+ ret = ustcomm_connect_unix_sock(sock_info->sock_path);
if (ret < 0) {
ERR("Error connecting to %s apps socket", sock_info->name);
prev_connect_failed = 1;
*/
if (sock_info->root_handle == -1) {
ret = lttng_abi_create_root_handle();
- if (ret) {
+ if (ret < 0) {
ERR("Error creating root handle");
ust_unlock();
goto quit;
for (;;) {
ssize_t len;
- struct lttcomm_ust_msg lum;
+ struct ustcomm_ust_msg lum;
- len = lttcomm_recv_unix_sock(sock, &lum, sizeof(lum));
+ len = ustcomm_recv_unix_sock(sock, &lum, sizeof(lum));
switch (len) {
case 0: /* orderly shutdown */
DBG("%s ltt-sessiond has performed an orderly shutdown\n", sock_info->name);
/* Release urcu mutexes */
rcu_bp_after_fork_child();
lttng_ust_cleanup(0);
+ lttng_context_vtid_reset();
/* Release mutexes and reenable signals */
ust_after_fork_common(fork_info);
lttng_ust_init();