143 #ifndef _FBR_FIBER_H_
144 #define _FBR_FIBER_H_
152 #include <sys/types.h>
153 #include <sys/socket.h>
160 #define FBR_CALL_STACK_SIZE 16
164 #define FBR_STACK_SIZE (64 * 1024)
171 #define fbr_assert(context, expr) ((void)(0))
173 #define fbr_assert(context, expr) \
175 __typeof__(expr) ex = (expr); \
179 fbr_dump_stack(context, fbr_log_e); \
180 __assert_fail(__STRING(expr), __FILE__, __LINE__, __ASSERT_FUNCTION); \
190 #define fbr_container_of(ptr, type, member) ({ \
191 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
192 (type *)( (char *)__mptr - offsetof(type,member) ); \
195 struct fbr_context_private;
230 struct fbr_context_private *
__p;
239 #define FBR_P struct fbr_context *fctx
245 #define FBR_P_ FBR_P,
256 #define FBR_A_ FBR_A,
305 #define fbr_need_log(fctx, test_level) ((test_level) <= (fctx)->logger->level)
310 #define fbr_set_log_level(fctx, desired_level) \
311 (fctx)->logger->level = (desired_level)
381 #define fbr_ev_upcast(ptr, type_no_struct) \
382 fbr_container_of(ptr, struct type_no_struct, ev_base)
443 struct fbr_mutex *mutex);
454 struct fbr_cond_var *cond,
struct fbr_mutex *mutex);
510 void fbr_destroy(
FBR_P);
544 __attribute__ ((format (printf, 2, 3)));
558 __attribute__ ((format (printf, 2, 3)));
572 __attribute__ ((format (printf, 2, 3)));
586 __attribute__ ((format (printf, 2, 3)));
600 __attribute__ ((format (printf, 2, 3)));
716 void fbr_yield(FBR_P);
730 void *fbr_alloc(
FBR_P_ size_t size);
761 void *fbr_calloc(
FBR_P_ unsigned int nmemb,
size_t size);
772 void fbr_free(
FBR_P_ void *ptr);
783 void fbr_free_nd(
FBR_P_ void *ptr);
794 int fbr_fd_nonblock(
FBR_P_ int fd);
814 ssize_t fbr_read(
FBR_P_ int fd,
void *buf,
size_t count);
836 ssize_t fbr_read_all(
FBR_P_ int fd,
void *buf,
size_t count);
855 ssize_t fbr_readline(
FBR_P_ int fd,
void *buffer,
size_t n);
873 ssize_t fbr_write(
FBR_P_ int fd, const
void *buf,
size_t count);
893 ssize_t fbr_write_all(
FBR_P_ int fd, const
void *buf,
size_t count);
912 ssize_t fbr_recvfrom(
FBR_P_ int sockfd,
void *buf,
size_t len,
int flags,
913 struct sockaddr *src_addr, socklen_t *addrlen);
932 ssize_t fbr_sendto(
FBR_P_ int sockfd, const
void *buf,
size_t len,
int flags, const
933 struct sockaddr *dest_addr, socklen_t addrlen);
949 int fbr_accept(
FBR_P_ int sockfd, struct sockaddr *addr, socklen_t *addrlen);
959 ev_tstamp fbr_sleep(
FBR_P_ ev_tstamp seconds);
995 void fbr_mutex_lock(
FBR_P_ struct fbr_mutex *mutex);
1010 int fbr_mutex_trylock(
FBR_P_ struct fbr_mutex *mutex);
1024 void fbr_mutex_unlock(
FBR_P_ struct fbr_mutex *mutex);
1080 int fbr_cond_wait(
FBR_P_ struct fbr_cond_var *cond, struct fbr_mutex *mutex);
1093 void fbr_cond_broadcast(
FBR_P_ struct fbr_cond_var *cond);
1106 void fbr_cond_signal(
FBR_P_ struct fbr_cond_var *cond);
1118 struct fbr_buffer *fbr_buffer_create(
FBR_P_ size_t size);
1127 void fbr_buffer_free(
FBR_P_ struct fbr_buffer *buffer);
1144 void *fbr_buffer_alloc_prepare(
FBR_P_ struct fbr_buffer *buffer,
size_t size);
1154 void fbr_buffer_alloc_commit(
FBR_P_ struct fbr_buffer *buffer);
1165 void fbr_buffer_alloc_abort(
FBR_P_ struct fbr_buffer *buffer);
1180 void *fbr_buffer_read_address(
FBR_P_ struct fbr_buffer *buffer,
size_t size);
1191 void fbr_buffer_read_advance(
FBR_P_ struct fbr_buffer *buffer);
1202 void fbr_buffer_read_discard(
FBR_P_ struct fbr_buffer *buffer);
1224 struct fbr_cond_var *fbr_buffer_cond_read(
FBR_P_ struct fbr_buffer *buffer);
1225 struct fbr_cond_var *fbr_buffer_cond_write(
FBR_P_ struct fbr_buffer *buffer);