void stream_io_submit(struct stream_request *req) { struct stream *s = req->stream; struct stream_loop *loop = s->loop; struct event_list *list; int events; req->__private.buf = req->buffer.buf; req->__private.len = req->buffer.len; if (req->request == REQ_READ) { list = &s->read_queue[IO_WAIT]; events = EV_READ; } else if (req->request == REQ_WRITE) { list = &s->write_queue[IO_WAIT]; events = EV_WRITE; } else if (req->request == REQ_ACCEPT) { list = &s->read_queue[IO_WAIT]; events = EV_READ; } if (event_list_empty(&req->node)) { event_list_add(&req->node, list); if (events & EV_READ) { __process_read_request(s); if (!event_list_empty(&s->read_queue[IO_FIN])) { stream_feed(s, EV_READ); goto out; } } if (events & EV_WRITE) { __process_write_request(s); if (!event_list_empty(&s->write_queue[IO_FIN])) { stream_feed(s, EV_WRITE); goto out; } } } else event_list_add(&req->node, list); switch (events) { case EV_READ: stream_try_io_start_read(loop, s); break; case EV_WRITE: stream_try_io_start_write(loop, s); } /* For future use of ET mode. */ #if 0 stream_feed(s, events); #endif out: return; }
int main( int argc, char **argv ) { int id = 0; time_t now = time( NULL ); int seconds = 100; int shift = 0; id = event_list_add( 0, now + seconds, seconds, shift, NULL, NULL ); printf("Event id: %d\n", id); id = event_list_add( 0, now + seconds, seconds, shift, NULL, NULL ); printf("Event id: %d\n", id); int numEvents = 0; numEvents = count_events(); printf("Number of events: %d\n", numEvents); event_list_clean(); numEvents = count_events(); printf("Number of events: %d\n", numEvents); return 0; }
int mqtt_set_event_cb(void (*event_cb)(int event, void *ctx), void *ctx) { if (!event_cb) return -1; if (!mqtt_client) return -1; mqtt_instance_event_t *ev = LITE_malloc(sizeof(mqtt_instance_event_t)); if (!ev) return -1; memset(ev, 0, sizeof(mqtt_instance_event_t)); ev->event_cb = event_cb; ev->ctx = ctx; event_list_add(ev); return 0; }
static int __move_to_queue(struct stream_request *req, struct event_list *dest) { event_list_del(&req->node); event_list_add(&req->node, dest); }