static gpointer delayed_control (gpointer data) { GstPoll *set = data; GstPollFD fd = GST_POLL_FD_INIT; fd.fd = 1; THREAD_START (); g_usleep (500000); gst_poll_add_fd (set, &fd); gst_poll_fd_ctl_write (set, &fd, TRUE); gst_poll_restart (set); THREAD_SYNCHRONIZE (); g_usleep (500000); gst_poll_add_fd (set, &fd); gst_poll_fd_ctl_write (set, &fd, TRUE); gst_poll_restart (set); return NULL; }
static FsMsnPollFD * add_pollfd_locked (FsMsnConnection *self, int fd, PollFdCallback callback, gboolean read, gboolean write, gboolean server) { FsMsnPollFD *pollfd = g_slice_new0 (FsMsnPollFD); gst_poll_fd_init (&pollfd->pollfd); pollfd->pollfd.fd = fd; pollfd->server = server; pollfd->want_read = read; pollfd->want_write = write; pollfd->status = FS_MSN_STATUS_AUTH; gst_poll_add_fd (self->poll, &pollfd->pollfd); gst_poll_fd_ctl_read (self->poll, &pollfd->pollfd, read); gst_poll_fd_ctl_write (self->poll, &pollfd->pollfd, write); pollfd->callback = callback; GST_DEBUG ("ADD_POLLFD %p (%p) - error %d, close %d, read %d-%d, write %d-%d", self->pollfds, pollfd, gst_poll_fd_has_error (self->poll, &pollfd->pollfd), gst_poll_fd_has_closed (self->poll, &pollfd->pollfd), pollfd->want_read, gst_poll_fd_can_read (self->poll, &pollfd->pollfd), pollfd->want_write, gst_poll_fd_can_write (self->poll, &pollfd->pollfd)); g_ptr_array_add (self->pollfds, pollfd); gst_poll_restart (self->poll); return pollfd; }
static void shutdown_fd_locked (FsMsnConnection *self, FsMsnPollFD *pollfd, gboolean equal) { gint i; guint closed = 0; for (i = 0; i < self->pollfds->len; i++) { FsMsnPollFD *p = g_ptr_array_index(self->pollfds, i); if ((equal && p == pollfd) || (!equal && p != pollfd)) { GST_DEBUG ("Shutting down p %p (fd %d)", p, p->pollfd.fd); if (!gst_poll_fd_has_closed (self->poll, &p->pollfd)) close (p->pollfd.fd); if (!gst_poll_remove_fd (self->poll, &p->pollfd)) GST_WARNING ("Could not remove pollfd %p", p); g_ptr_array_remove_index_fast (self->pollfds, i); g_slice_free (FsMsnPollFD, p); closed++; i--; } } if (closed) gst_poll_restart (self->poll); else GST_WARNING ("Could find pollfd to remove"); }
static gboolean gst_kms_sink_stop (GstBaseSink * bsink) { GstKMSSink *self; self = GST_KMS_SINK (bsink); gst_buffer_replace (&self->last_buffer, NULL); gst_caps_replace (&self->allowed_caps, NULL); gst_object_replace ((GstObject **) & self->pool, NULL); gst_object_replace ((GstObject **) & self->allocator, NULL); gst_poll_remove_fd (self->poll, &self->pollfd); gst_poll_restart (self->poll); gst_poll_fd_init (&self->pollfd); if (self->fd >= 0) { drmClose (self->fd); self->fd = -1; } return TRUE; }