diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-04-23 07:39:59 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2024-04-23 07:39:59 -0700 |
| commit | 01817988f4631bdd8ee5cec9c6b69039712a93fe (patch) | |
| tree | c8c4259671fbb586a466a8c5d623fc8c183f8927 /src/nng.c | |
| parent | ff00eac2401732e9efb6170ffb90100dcf6332a7 (diff) | |
| download | nng-01817988f4631bdd8ee5cec9c6b69039712a93fe.tar.gz nng-01817988f4631bdd8ee5cec9c6b69039712a93fe.tar.bz2 nng-01817988f4631bdd8ee5cec9c6b69039712a93fe.zip | |
Move the rest of the functionality from platform.h into core.
This also deprecates supplemental/util/platform.h.
Diffstat (limited to 'src/nng.c')
| -rw-r--r-- | src/nng.c | 161 |
1 files changed, 159 insertions, 2 deletions
@@ -1,5 +1,5 @@ // -// Copyright 2022 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> // // This software is supplied under the terms of the MIT License, a @@ -2016,4 +2016,161 @@ void nng_init_set_parameter(nng_init_parameter p, uint64_t value) { nni_init_set_param(p, value); -}
\ No newline at end of file +} + +nng_time +nng_clock(void) +{ + (void) nni_init(); + return (nni_clock()); +} + +// Sleep for specified msecs. +void +nng_msleep(nng_duration dur) +{ + (void) nni_init(); + nni_msleep(dur); +} + +// Create and start a thread. Note that on some platforms, this might +// actually be a coroutine, with limitations about what system APIs +// you can call. Therefore, these threads should only be used with the +// I/O APIs provided by nng. The thread runs until completion. +int +nng_thread_create(nng_thread **thrp, void (*func)(void *), void *arg) +{ + nni_thr *thr; + int rv; + + (void) nni_init(); + + if ((thr = NNI_ALLOC_STRUCT(thr)) == NULL) { + return (NNG_ENOMEM); + } + *thrp = (void *) thr; + if ((rv = nni_thr_init(thr, func, arg)) != 0) { + return (rv); + } + nni_thr_run(thr); + return (0); +} + +void +nng_thread_set_name(nng_thread *thr, const char *name) +{ + nni_thr_set_name((void *) thr, name); +} + +// Destroy a thread (waiting for it to complete.) When this function +// returns all resources for the thread are cleaned up. +void +nng_thread_destroy(nng_thread *thr) +{ + nni_thr *t = (void *) thr; + nni_thr_fini(t); + NNI_FREE_STRUCT(t); +} + +struct nng_mtx { + nni_mtx m; +}; + +int +nng_mtx_alloc(nng_mtx **mpp) +{ + nng_mtx *mp; + + (void) nni_init(); + + if ((mp = NNI_ALLOC_STRUCT(mp)) == NULL) { + return (NNG_ENOMEM); + } + nni_mtx_init(&mp->m); + *mpp = mp; + return (0); +} + +void +nng_mtx_free(nng_mtx *mp) +{ + if (mp != NULL) { + nni_mtx_fini(&mp->m); + NNI_FREE_STRUCT(mp); + } +} + +void +nng_mtx_lock(nng_mtx *mp) +{ + nni_mtx_lock(&mp->m); +} + +void +nng_mtx_unlock(nng_mtx *mp) +{ + nni_mtx_unlock(&mp->m); +} + +struct nng_cv { + nni_cv c; +}; + +int +nng_cv_alloc(nng_cv **cvp, nng_mtx *mx) +{ + nng_cv *cv; + + if ((cv = NNI_ALLOC_STRUCT(cv)) == NULL) { + return (NNG_ENOMEM); + } + nni_cv_init(&cv->c, &mx->m); + *cvp = cv; + return (0); +} + +void +nng_cv_free(nng_cv *cv) +{ + if (cv != NULL) { + nni_cv_fini(&cv->c); + NNI_FREE_STRUCT(cv); + } +} + +void +nng_cv_wait(nng_cv *cv) +{ + nni_cv_wait(&cv->c); +} + +int +nng_cv_until(nng_cv *cv, nng_time when) +{ + return (nni_cv_until(&cv->c, (nni_time) when)); +} + +void +nng_cv_wake(nng_cv *cv) +{ + nni_cv_wake(&cv->c); +} + +void +nng_cv_wake1(nng_cv *cv) +{ + nni_cv_wake1(&cv->c); +} + +uint32_t +nng_random(void) +{ + (void) nni_init(); + return (nni_random()); +} + +int +nng_socket_pair(int fds[2]) +{ + return (nni_socket_pair(fds)); +} |
