static void read_watcher_cb(struct upump *unused) { char buffer[strlen(padding) + 1]; ssize_t ret = read(pipefd[0], buffer, strlen(padding) + 1); assert(ret != -1); bytes_read += ret; if (bytes_read > MIN_READ) { printf("read watcher passed\n"); upump_stop(write_idler); upump_stop(read_watcher); } }
static void write_watcher_cb(struct upump *unused) { printf("write watcher passed\n"); if (blocker) { upump_blocker_free(blocker); } upump_stop(write_watcher); }
/** @internal @This is called when the queue can be written again. * Unblock the sink. * * @param upump description structure of the watcher */ static void upipe_nacl_audio_watcher(struct upump *upump) { struct upipe *upipe = upump_get_opaque(upump, struct upipe *); if (upipe_nacl_audio_output_input(upipe)) { upump_stop(upump); } upipe_nacl_audio_unblock_input(upipe); }
static void write_idler_cb(struct upump *upump) { if (bytes_written > MIN_READ) { upump_stop(upump); return; } ssize_t ret = write(pipefd[1], padding, strlen(padding) + 1); if (ret == -1 && (errno == EWOULDBLOCK || errno == EAGAIN)) { printf("write idler blocked\n"); blocker = upump_blocker_alloc(write_idler, blocker_cb, NULL, NULL); assert(blocker != NULL); upump_start(write_watcher); upump_start(read_timer); } else { assert(ret != -1); bytes_written += ret; } }