diff options
| author | Garrett D'Amore <garrett@damore.org> | 2016-12-12 12:23:32 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2016-12-12 12:23:32 -0800 |
| commit | 0991802d1c91c790c60828145ddecbfe1583f6db (patch) | |
| tree | dc2e47e482dba13fa789a6946c16f0a934abdda4 /src/platform | |
| parent | 1adefe3879b211a47a784f477d56a9416ae72254 (diff) | |
| download | nng-0991802d1c91c790c60828145ddecbfe1583f6db.tar.gz nng-0991802d1c91c790c60828145ddecbfe1583f6db.tar.bz2 nng-0991802d1c91c790c60828145ddecbfe1583f6db.zip | |
Added threading primitives, more complete transport API.
Diffstat (limited to 'src/platform')
| -rw-r--r-- | src/platform/posix/posix_impl.h | 2 | ||||
| -rw-r--r-- | src/platform/posix/posix_synch.h | 1 | ||||
| -rw-r--r-- | src/platform/posix/posix_thread.h | 67 |
3 files changed, 68 insertions, 2 deletions
diff --git a/src/platform/posix/posix_impl.h b/src/platform/posix/posix_impl.h index 89022e60..60a1d663 100644 --- a/src/platform/posix/posix_impl.h +++ b/src/platform/posix/posix_impl.h @@ -36,6 +36,6 @@ #include "platform/posix/posix_alloc.h" #include "platform/posix/posix_clock.h" #include "platform/posix/posix_synch.h" -/* #include "platform/posix/posix_thread.h" */ +#include "platform/posix/posix_thread.h" #include "platform/posix/posix_vsnprintf.h" #endif diff --git a/src/platform/posix/posix_synch.h b/src/platform/posix/posix_synch.h index b3b15fee..94058d32 100644 --- a/src/platform/posix/posix_synch.h +++ b/src/platform/posix/posix_synch.h @@ -118,7 +118,6 @@ nni_mutex_tryenter(nni_mutex_t m) return (0); } - int cond_attr(pthread_condattr_t **attrpp) { diff --git a/src/platform/posix/posix_thread.h b/src/platform/posix/posix_thread.h new file mode 100644 index 00000000..239959f8 --- /dev/null +++ b/src/platform/posix/posix_thread.h @@ -0,0 +1,67 @@ +/* + * Copyright 2016 Garrett D'Amore <garrett@damore.org> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/* + * This is more of a direct #include of a .c rather than .h file. + * But having it be a .h makes compiler rules work out properly. Do + * not include this more than once into your program, or you will + * get multiple symbols defined. + */ + +/* + * POSIX threads. + */ + +#include <pthread.h> +#include <time.h> +#include <string.h> + +struct nni_thread { + pthread_t tid; +}; + +int +nni_thread_create(nni_thread_t *tp, void (*fn)(void *), void *arg) +{ + nni_thread_t thr; + int rv; + + if ((thr = nni_alloc(sizeof (*thr))) == NULL) { + return (NNG_ENOMEM); + } + if ((rv = pthread_create(&thr->tid, NULL, (void *)fn, arg)) != 0) { + nni_free(thr, sizeof (*thr)); + return (NNG_ENOMEM); + } + *tp = thr; + return (0); +} + +void +nni_thread_reap(nni_thread_t thr) +{ + int rv; + if ((rv = pthread_join(thr->tid, NULL)) != 0) { + nni_panic("pthread_thread: %s", strerror(errno)); + } + nni_free(thr, sizeof (*thr)); +} |
