-int session_open_fifo(Session *s) {
- struct epoll_event ev;
- int r;
-
- assert(s);
-
- if (s->fifo_fd >= 0)
- return 0;
-
- if (!s->fifo_path)
- return -EINVAL;
-
- s->fifo_fd = open(s->fifo_path, O_RDONLY|O_CLOEXEC|O_NDELAY);
- if (s->fifo_fd < 0)
- return -errno;
-
- r = hashmap_put(s->manager->fifo_fds, INT_TO_PTR(s->fifo_fd + 1), s);
- if (r < 0)
- return r;
-
- zero(ev);
- ev.events = 0;
- ev.data.u32 = FD_FIFO_BASE + s->fifo_fd;
-
- if (epoll_ctl(s->manager->epoll_fd, EPOLL_CTL_ADD, s->fifo_fd, &ev) < 0)
- return -errno;
-
- return 0;
-}
-