| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #ifndef _WRITEPOLL_H |
| #define _WRITEPOLL_H |
| |
| #include <stdbool.h> |
| #include <stdint.h> |
| |
| #include "thread.h" |
| #include "stream.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| struct pullwr; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| extern struct pullwr *_pullwr_new(struct thread_master *tm, int fd, |
| void *arg, |
| void (*fill)(void *, struct pullwr *), |
| void (*err)(void *, struct pullwr *, bool eof)); |
| extern void pullwr_del(struct pullwr *pullwr); |
| |
| |
| |
| |
| |
| #define pullwr_new(tm, fd, arg, fill, err) ({ \ |
| void (*fill_typechk)(typeof(arg), struct pullwr *) = fill; \ |
| void (*err_typechk)(typeof(arg), struct pullwr *, bool) = err; \ |
| _pullwr_new(tm, fd, arg, (void *)fill_typechk, (void *)err_typechk); \ |
| }) |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| extern void pullwr_cfg(struct pullwr *pullwr, int64_t max_spin_usec, |
| size_t write_threshold); |
| |
| extern void pullwr_bump(struct pullwr *pullwr); |
| extern void pullwr_write(struct pullwr *pullwr, |
| const void *data, size_t len); |
| |
| static inline void pullwr_write_stream(struct pullwr *pullwr, |
| struct stream *s) |
| { |
| pullwr_write(pullwr, s->data, stream_get_endp(s)); |
| } |
| |
| extern void pullwr_stats(struct pullwr *pullwr, uint64_t *total_written, |
| size_t *pending, size_t *kernel_pending); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _WRITEPOLL_H */ |