static GSource *qio_channel_tls_create_watch(QIOChannel *ioc, GIOCondition condition) { QIOChannelTLS *tioc = QIO_CHANNEL_TLS(ioc); return qio_channel_create_watch(tioc->master, condition); }
static GSource *pty_chr_add_watch(Chardev *chr, GIOCondition cond) { PtyChardev *s = PTY_CHARDEV(chr); if (!s->connected) { return NULL; } return qio_channel_create_watch(s->ioc, cond); }
guint qio_channel_add_watch(QIOChannel *ioc, GIOCondition condition, QIOChannelFunc func, gpointer user_data, GDestroyNotify notify) { GSource *source; guint id; source = qio_channel_create_watch(ioc, condition); g_source_set_callback(source, (GSourceFunc)func, user_data, notify); id = g_source_attach(source, NULL); g_source_unref(source); return id; }
void qio_channel_wait(QIOChannel *ioc, GIOCondition condition) { GMainContext *ctxt = g_main_context_new(); GMainLoop *loop = g_main_loop_new(ctxt, TRUE); GSource *source; source = qio_channel_create_watch(ioc, condition); g_source_set_callback(source, (GSourceFunc)qio_channel_wait_complete, loop, NULL); g_source_attach(source, ctxt); g_main_loop_run(loop); g_source_unref(source); g_main_loop_unref(loop); g_main_context_unref(ctxt); }
static gboolean io_watch_poll_prepare(GSource *source, gint *timeout) { IOWatchPoll *iwp = io_watch_poll_from_source(source); bool now_active = iwp->fd_can_read(iwp->opaque) > 0; bool was_active = iwp->src != NULL; if (was_active == now_active) { return FALSE; } if (now_active) { iwp->src = qio_channel_create_watch( iwp->ioc, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL); g_source_set_callback(iwp->src, iwp->fd_read, iwp->opaque, NULL); g_source_add_child_source(source, iwp->src); g_source_unref(iwp->src); } else { g_source_remove_child_source(source, iwp->src); iwp->src = NULL; } return FALSE; }
static GSource *fd_chr_add_watch(Chardev *chr, GIOCondition cond) { FDChardev *s = FD_CHARDEV(chr); return qio_channel_create_watch(s->ioc_out, cond); }
static GSource *tcp_chr_add_watch(Chardev *chr, GIOCondition cond) { SocketChardev *s = SOCKET_CHARDEV(chr); return qio_channel_create_watch(s->ioc, cond); }