// This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. #include "export.h" #include "eventloop_platform.h" #include "public/container_of.h" #include "public/list.h" EXPORT int tlsl_eventloop_init(struct tlsl_eventloop *el) { int platform_res; intrusive_list_init_empty(&el->event_list); if ((platform_res = tlsl_platform_el_init(el))) return platform_res; el->valid = true; return 0; } EXPORT void tlsl_eventloop_cleanup(struct tlsl_eventloop *el) { struct intrusive_list *li; struct tlsl_event *e; if (!el || !el->valid) return; INTRUSIVE_LIST_FOR_EACH_NO_REMOVE(li, &el->event_list) { e = TLSL_CONTAINER_OF(li, struct tlsl_event, list); tlsl_platform_el_event_cleanup(el, e); } tlsl_platform_el_cleanup(el); el->valid = false; } EXPORT int tlsl_eventloop_wait( struct tlsl_eventloop *el, tlsl_event_id_t *id_out, uint32_t *flags_out, int timeout_ms) { return tlsl_platform_el_wait(el, id_out, flags_out, timeout_ms); } EXPORT int tlsl_eventloop_clear(struct tlsl_eventloop *el, struct tlsl_event *e) { return tlsl_platform_el_event_clear(el, e); } EXPORT void tlsl_eventloop_remove(struct tlsl_eventloop *el, struct tlsl_event *e) { tlsl_platform_el_event_remove(el, e); tlsl_platform_el_event_cleanup(el, e); } EXPORT int tlsl_eventloop_add_timer( struct tlsl_eventloop *el, struct tlsl_event *e, uint64_t millis, bool oneshot) { int res; if ((res = tlsl_platform_el_add_timer(el, e, millis, oneshot))) return res; e->id.source = TLSL_EVENT_SOURCE_TIMER; return 0; } EXPORT int tlsl_eventloop_add_fd( struct tlsl_eventloop *el, struct tlsl_event *e, int fd, uint32_t flags) { int res; if ((res = tlsl_platform_el_add_fd(el, e, fd, flags))) return res; e->id.source = TLSL_EVENT_SOURCE_FD; return 0; }