/** * Build an alive ping message. * * @return a /PI message. */ pmsg_t * g2_build_alive_ping(void) { ONCE_FLAG_RUN(build_alive_pi_done, g2_build_alive_ping_once); return pmsg_clone(build_alive_pi); }
/** * Build a pong message. * * @return a /PO message. */ pmsg_t * g2_build_pong(void) { ONCE_FLAG_RUN(build_po_done, g2_build_pong_once); return pmsg_clone(build_po); }
/** * Mark a file descriptor as being preserved from closing by * fd_close_unpreserved_from(). */ void fd_preserve(int fd) { g_assert(!is_a_socket(fd)); ONCE_FLAG_RUN(fd_preserved_allocated, fd_preserved_allocate); hset_insert(fd_preserved, int_to_pointer(fd)); }
static inline ALWAYS_INLINE void PIO_LOCK(int fd) { ONCE_FLAG_RUN(pio_inited, pio_init_once); g_assert(fd >= 0); g_assert(UNSIGNED(fd) < pio_capacity); spinlock(&pio_locks[fd]); }
/** * Initialze a BFD symbol lookup environment context. * * @return new context that will need to be closed with bfd_util_close_null(). */ bfd_env_t * bfd_util_init(void) { static once_flag_t done; bfd_env_t *be; XMALLOC0(be); be->magic = BFD_ENV_MAGIC; mutex_init(&be->lock); ONCE_FLAG_RUN(done, bfd_init); return be; }
/** * Initialize the PATRICIA map. */ static inline ALWAYS_INLINE void g2_msg_init(void) { ONCE_FLAG_RUN(g2_msg_pt_created, g2_msg_build_map); }