volatile enum ust_loglevel ust_loglevel;
+static int dummy_pipe[2];
+
+static
+void __attribute__((constructor)) setup_dummy_pipe(void)
+{
+ pipe(dummy_pipe);
+ /* Only dummy_pipe[0] is used */
+ close(dummy_pipe[1]);
+ /* FIXME: Handle pipe() failure */
+}
+
+static
+inline int get_dummy_fd(void)
+{
+ return dup(dummy_pipe[0]);
+}
+
static
void init_object(struct lttng_ust_object_data *data)
{
err = 1;
} else {
DBG("Received shm path: %s\n", shm_path);
- metadata_data->shm_fd = -1;
+ metadata_data->shm_fd = get_dummy_fd();
metadata_data->shm_path = shm_path;
}
err = 1;
} else {
DBG("Received wait pipe path: %s\n", wait_pipe_path);
- metadata_data->wait_fd = -1;
+ metadata_data->wait_fd = get_dummy_fd();
metadata_data->wait_pipe_path = wait_pipe_path;
}
return -EINVAL;
}
+int ustctl_open_wait_pipe(int sock,
+ struct lttng_ust_object_data *channel_data)
+{
+ struct ustcomm_ust_msg lum;
+ struct ustcomm_ust_reply lur;
+ int ret;
+
+ if (!channel_data)
+ return -EINVAL;
+
+ /* Create metadata channel */
+ memset(&lum, 0, sizeof(lum));
+ lum.handle = channel_data->handle;
+ lum.cmd = LTTNG_UST_STREAM_PIPE;
+ ret = ustcomm_send_app_cmd(sock, &lum, &lur);
+
+ if (ret) {
+ goto error;
+ }
+ if (lur.ret_code != USTCOMM_OK) {
+ ret = lur.ret_code;
+ goto error;
+ }
+
+ return 0;
+
+error:
+ return ret;
+}
+
int ustctl_create_channel(int sock, int session_handle,
struct lttng_ust_channel_attr *chops,
struct lttng_ust_object_data **_channel_data)
err = 1;
} else {
DBG("Received shm path: %s\n", shm_path);
- channel_data->shm_fd = -1;
+ channel_data->shm_fd = get_dummy_fd();
channel_data->shm_path = shm_path;
}
err = 1;
} else {
DBG("Received wait pipe path: %s\n", wait_pipe_path);
- channel_data->wait_fd = -1;
+ channel_data->wait_fd = get_dummy_fd();
channel_data->wait_pipe_path = wait_pipe_path;
}
err = 1;
} else {
DBG("Received shm path: %s\n", shm_path);
- stream_data->shm_fd = -1;
+ stream_data->shm_fd = get_dummy_fd();
stream_data->shm_path = shm_path;
}
err = 1;
} else {
DBG("Received wait pipe path: %s\n", wait_pipe_path);
- stream_data->wait_fd = -1;
+ stream_data->wait_fd = get_dummy_fd();
stream_data->wait_pipe_path = wait_pipe_path;
}