+ /*
+ * LTTNG_UST_TRACEPOINT_FIELD_LIST_GET needs to send the field
+ * after the reply.
+ */
+ if (lur.ret_code == USTCOMM_OK) {
+ switch (lum->cmd) {
+ case LTTNG_UST_TRACEPOINT_FIELD_LIST_GET:
+ len = ustcomm_send_unix_sock(sock,
+ &args.field_list.entry,
+ sizeof(args.field_list.entry));
+ if (len != sizeof(args.field_list.entry)) {
+ ret = -1;
+ goto error;
+ }
+ }
+ }
+ /*
+ * We still have the memory map reference, and the fds have been
+ * sent to the sessiond. We can therefore close those fds. Note
+ * that we keep the write side of the wait_fd open, but close
+ * the read side.
+ */
+ if (lur.ret_code == USTCOMM_OK) {
+ switch (lum->cmd) {
+ case LTTNG_UST_STREAM:
+ if (shm_fd >= 0) {
+ ret = close(shm_fd);
+ if (ret) {
+ PERROR("Error closing stream shm_fd");
+ }
+ *args.stream.shm_fd = -1;
+ }
+ if (wait_fd >= 0) {
+ ret = close(wait_fd);
+ if (ret) {
+ PERROR("Error closing stream wait_fd");
+ }
+ *args.stream.wait_fd = -1;
+ }
+ break;
+ case LTTNG_UST_METADATA:
+ case LTTNG_UST_CHANNEL:
+ if (shm_fd >= 0) {
+ ret = close(shm_fd);
+ if (ret) {
+ PERROR("Error closing channel shm_fd");
+ }
+ *args.channel.shm_fd = -1;
+ }
+ if (wait_fd >= 0) {
+ ret = close(wait_fd);
+ if (ret) {
+ PERROR("Error closing channel wait_fd");
+ }
+ *args.channel.wait_fd = -1;
+ }
+ break;
+ }
+ }
+