143 #ifndef _FBR_FIBER_H_
144 #define _FBR_FIBER_H_
153 #include <sys/types.h>
154 #include <sys/socket.h>
155 #include <sys/queue.h>
162 #define FBR_CALL_STACK_SIZE 16
166 #define FBR_STACK_SIZE (64 * 1024)
173 #define fbr_assert(context, expr) ((void)(0))
175 #define fbr_assert(context, expr) \
177 __typeof__(expr) ex = (expr); \
181 fbr_dump_stack(context, fbr_log_e); \
182 __assert_fail(__STRING(expr), __FILE__, __LINE__, __ASSERT_FUNCTION); \
192 #define fbr_container_of(ptr, type, member) ({ \
193 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
194 (type *)( (char *)__mptr - offsetof(type,member) ); \
197 struct fbr_context_private;
230 struct fbr_context_private *
__p;
239 #define FBR_P struct fbr_context *fctx
244 #define FBR_PU __attribute__((unused)) FBR_P
250 #define FBR_P_ FBR_P,
255 #define FBR_PU_ __attribute__((unused)) FBR_P_
266 #define FBR_A_ FBR_A,
353 return level <= fctx->logger->level;
361 fctx->logger->level = desired_level;
413 #define FBR_DESTRUCTOR_INITIALIZER { \
427 struct fbr_id_tailq *head;
457 #define fbr_ev_upcast(ptr, type_no_struct) \
458 fbr_container_of(ptr, struct type_no_struct, ev_base)
509 struct fbr_id_tailq pending;
522 struct fbr_id_tailq waiting;
535 size_t prepared_bytes;
536 size_t waiting_bytes;
557 #define FBR_MAX_KEY 64
591 static inline void fbr_destructor_init(
struct fbr_destructor *dtor)
593 memset(dtor, 0x00,
sizeof(*dtor));
683 void fbr_destroy(
FBR_P);
717 __attribute__ ((format (printf, 2, 3)));
731 __attribute__ ((format (printf, 2, 3)));
745 __attribute__ ((format (printf, 2, 3)));
759 __attribute__ ((format (printf, 2, 3)));
773 __attribute__ ((format (printf, 2, 3)));
778 #define FBR_MAX_FIBER_NAME 64
932 void fbr_yield(
FBR_P);
946 void *fbr_alloc(
FBR_P_ size_t size);
977 void *fbr_calloc(
FBR_P_ unsigned int nmemb,
size_t size);
988 void fbr_free(
FBR_P_ void *ptr);
999 void fbr_free_nd(
FBR_P_ void *ptr);
1010 int fbr_fd_nonblock(
FBR_P_ int fd);
1030 ssize_t fbr_read(
FBR_P_ int fd,
void *buf,
size_t count);
1052 ssize_t fbr_read_all(
FBR_P_ int fd,
void *buf,
size_t count);
1071 ssize_t fbr_readline(
FBR_P_ int fd,
void *buffer,
size_t n);
1089 ssize_t fbr_write(
FBR_P_ int fd,
const void *buf,
size_t count);
1109 ssize_t fbr_write_all(
FBR_P_ int fd,
const void *buf,
size_t count);
1128 ssize_t fbr_recvfrom(
FBR_P_ int sockfd,
void *buf,
size_t len,
int flags,
1129 struct sockaddr *src_addr, socklen_t *addrlen);
1148 ssize_t fbr_sendto(
FBR_P_ int sockfd,
const void *buf,
size_t len,
int flags,
const
1149 struct sockaddr *dest_addr, socklen_t addrlen);
1165 int fbr_accept(
FBR_P_ int sockfd,
struct sockaddr *addr, socklen_t *addrlen);
1175 ev_tstamp fbr_sleep(
FBR_P_ ev_tstamp seconds);
1361 void *fbr_buffer_alloc_prepare(
FBR_P_ struct fbr_buffer *buffer,
size_t size);
1397 void *fbr_buffer_read_address(
FBR_P_ struct fbr_buffer *buffer,
size_t size);
1449 return &buffer->committed_cond;
1460 return &buffer->bytes_freed_cond;
1478 fbr_mutex_lock(
FBR_A_ &mutex);
1480 retval = fbr_cond_wait(
FBR_A_ &buffer->committed_cond, &mutex);
1481 assert(0 == retval);
1483 fbr_mutex_unlock(
FBR_A_ &mutex);
1518 fbr_mutex_lock(
FBR_A_ &mutex);
1520 retval = fbr_cond_wait(
FBR_A_ &buffer->bytes_freed_cond,
1522 assert(0 == retval);
1524 fbr_mutex_unlock(
FBR_A_ &mutex);