static void simple_socket_init(struct simple_socket *s, struct socket_ops *ops, int fd) { s->base.ops = ops; mutex_init(&s->mutex); wait_list_init(&s->reading, 0); wait_list_init(&s->writing, 0); s->fd = fd; if (fd >= 0) s->watched_fd = watched_fd_create(fd, simple_socket_handle_events, s); }
static struct client_socket *client_socket_create( struct addrinfo *addrinfos, void (*fai)(struct addrinfo *)) { struct connector *c = xalloc(sizeof *c); struct client_socket *s = xalloc(sizeof *s); c->socket = s; tasklet_init(&c->tasklet, &s->base.mutex, c); wait_list_init(&c->connecting, 0); c->fd = -1; c->connected = 0; c->next_addrinfo = c->addrinfos = addrinfos; c->fai = fai; error_init(&c->err); simple_socket_init(&s->base, &client_socket_ops, -1); s->connector = c; /* Start connecting */ mutex_lock(&s->base.mutex); start_connecting(c); tasklet_later(&c->tasklet, finish_connecting); mutex_unlock(&s->base.mutex); return s; }
void scheduler_init(void) { next_proc_id = 0; registry = hash_make(); named_processes = hash_make(); proc_queue_init(&queues.high_prio); proc_queue_init(&queues.normal_prio); proc_queue_init(&queues.low_prio); wait_list_init(&queues.on_timed_receive); proc_list_init(&queues.on_infinite_receive); //runtime = 0; scheduler_runtime_start(); last_event_fired_ns = monotonic_clock(); avg_event_gap_ns = MANUAL_POLLING_THRESHOLD; expect_event_in_ns = MANUAL_POLLING_THRESHOLD; memset(purgatory, 0, sizeof(purgatory)); num_purged = 0; }
static struct simple_server_socket *simple_server_socket_create(int *fds, int n_fds) { int i; struct simple_server_socket *s = xalloc(sizeof *s); s->base.ops = &simple_server_socket_ops; mutex_init(&s->mutex); wait_list_init(&s->accepting, 0); s->n_fds = n_fds; s->fds = xalloc(n_fds * sizeof *s->fds); for (i = 0; i < n_fds; i++) { struct server_fd *sfd = &s->fds[i]; sfd->socket = s; sfd->fd = fds[i]; sfd->ready = FALSE; sfd->watched_fd = watched_fd_create(fds[i], accept_handle_events, sfd); } return s; }