diff options
| author | Garrett D'Amore <garrett@damore.org> | 2016-12-21 23:51:14 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2016-12-21 23:51:14 -0800 |
| commit | 3ec3021ee15f0e45b378e4589ad2fdf0344a63de (patch) | |
| tree | 2eb4ba5c2119f13a66f93269b084839bb686cc43 /src | |
| parent | 20a75521d5d362f5be7d0fb54e78c85d0e32f3cd (diff) | |
| download | nng-3ec3021ee15f0e45b378e4589ad2fdf0344a63de.tar.gz nng-3ec3021ee15f0e45b378e4589ad2fdf0344a63de.tar.bz2 nng-3ec3021ee15f0e45b378e4589ad2fdf0344a63de.zip | |
Ditch our own snprintf/vsnprintf (C99). Symbol naming fixes for inproc.
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/core/nng_impl.h | 45 | ||||
| -rw-r--r-- | src/core/panic.c | 45 | ||||
| -rw-r--r-- | src/core/platform.h | 212 | ||||
| -rw-r--r-- | src/core/snprintf.c | 31 | ||||
| -rw-r--r-- | src/core/snprintf.h | 24 | ||||
| -rw-r--r-- | src/platform/posix/posix_vsnprintf.c | 24 | ||||
| -rw-r--r-- | src/transport/inproc/inproc.c | 297 |
8 files changed, 278 insertions, 403 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b4367365..ab8d4659 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -45,8 +45,6 @@ set (NNG_SOURCES core/platform.h core/protocol.c core/protocol.h - core/snprintf.c - core/snprintf.h core/socket.c core/socket.h core/transport.c @@ -60,7 +58,6 @@ set (NNG_SOURCES platform/posix/posix_debug.c platform/posix/posix_synch.c platform/posix/posix_thread.c - platform/posix/posix_vsnprintf.c protocol/pair/pair.c diff --git a/src/core/nng_impl.h b/src/core/nng_impl.h index 5b473434..f45394e9 100644 --- a/src/core/nng_impl.h +++ b/src/core/nng_impl.h @@ -1,44 +1,39 @@ -/* - * Copyright 2016 Garrett D'Amore <garrett@damore.org> - * - * This software is supplied under the terms of the MIT License, a - * copy of which should be located in the distribution where this - * file was obtained (LICENSE.txt). A copy of the license may also be - * found online at https://opensource.org/licenses/MIT. - */ - +// +// Copyright 2016 Garrett D'Amore <garrett@damore.org> +// +// This software is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// #ifndef CORE_NNG_IMPL_H #define CORE_NNG_IMPL_H #include "nng.h" -/* - * Internal implementation things for NNG, common definitions, etc. - * All internal modules wind up including this file to avoid having - * to figure out which header(s) to include. - * - * Hopefully it should be clear by the name that this file and its contents - * are *NOT* for use outside of this library. - * - * Symbols that are private to the library begin with the nni_ prefix, whereas - * those starting with nng_ are intended for external consumption. The latter - * symbols should be found in the toplevel nng.h header. - */ - +// Internal implementation things for NNG, common definitions, etc. +// All internal modules wind up including this file to avoid having +// to figure out which header(s) to include. +// +// Hopefully it should be clear by the name that this file and its contents +// are *NOT* for use outside of this library. +// +// Symbols that are private to the library begin with the nni_ prefix, whereas +// those starting with nng_ are intended for external consumption. The latter +// symbols should be found in the toplevel nng.h header. #include "core/defs.h" #include "core/list.h" #include "core/init.h" #include "core/message.h" #include "core/msgqueue.h" #include "core/panic.h" -#include "core/snprintf.h" #include "core/platform.h" #include "core/protocol.h" #include "core/transport.h" -/* These have to come after the others - particularly transport.h */ +// These have to come after the others - particularly transport.h #include "core/pipe.h" #include "core/socket.h" #include "core/endpt.h" -#endif /* CORE_NNG_IMPL_H */ +#endif // CORE_NNG_IMPL_H diff --git a/src/core/panic.c b/src/core/panic.c index 822c0904..65eb0747 100644 --- a/src/core/panic.c +++ b/src/core/panic.c @@ -1,15 +1,16 @@ -/* - * Copyright 2016 Garrett D'Amore <garrett@damore.org> - * - * This software is supplied under the terms of the MIT License, a - * copy of which should be located in the distribution where this - * file was obtained (LICENSE.txt). A copy of the license may also be - * found online at https://opensource.org/licenses/MIT. - */ +// +// Copyright 2016 Garrett D'Amore <garrett@damore.org> +// +// This software is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// #include <stdlib.h> #include <string.h> #include <stdarg.h> +#include <stdio.h> #ifdef NNG_HAVE_BACKTRACE #include <execinfo.h> @@ -17,11 +18,11 @@ #include "core/nng_impl.h" -/* - * Panic handling. - */ +// +// Panic handling. +// static void -show_backtrace(void) +nni_show_backtrace(void) { #if NNG_HAVE_BACKTRACE void *frames[50]; @@ -43,13 +44,13 @@ show_backtrace(void) } -/* - * nni_panic shows a panic message, a possible stack bracktrace, then aborts - * the process/program. This should only be called when a condition arises - * that should not be possible, e.g. a programming assertion failure. It should - * not be called in situations such as ENOMEM, as nni_panic is fairly rude - * to any application it may be called from within. - */ +// +// nni_panic shows a panic message, a possible stack bracktrace, then aborts +// the process/program. This should only be called when a condition arises +// that should not be possible, e.g. a programming assertion failure. It should +// not be called in situations such as ENOMEM, as nni_panic is fairly rude +// to any application it may be called from within. +// void nni_panic(const char *fmt, ...) { @@ -58,15 +59,15 @@ nni_panic(const char *fmt, ...) va_list va; va_start(va, fmt); - (void) nni_snprintf(fbuf, sizeof (buf), "panic: %s", fmt); - (void) nni_vsnprintf(buf, sizeof (buf), fbuf, va); + (void) snprintf(fbuf, sizeof (fbuf), "panic: %s", fmt); + (void) vsnprintf(buf, sizeof (buf), fbuf, va); va_end(va); nni_println(buf); nni_println("This message is indicative of a BUG."); nni_println("Report this at http://github.com/nanomsg/nanomsg"); - show_backtrace(); + nni_show_backtrace(); nni_plat_abort(); } diff --git a/src/core/platform.h b/src/core/platform.h index 32e8727f..00401493 100644 --- a/src/core/platform.h +++ b/src/core/platform.h @@ -1,90 +1,69 @@ -/* - * Copyright 2016 Garrett D'Amore <garrett@damore.org> - * - * This software is supplied under the terms of the MIT License, a - * copy of which should be located in the distribution where this - * file was obtained (LICENSE.txt). A copy of the license may also be - * found online at https://opensource.org/licenses/MIT. - */ +// +// Copyright 2016 Garrett D'Amore <garrett@damore.org> +// +// This software is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// #ifndef CORE_PLATFORM_H #define CORE_PLATFORM_H -/* - * We require some standard C header files. The only one of these that might - * be problematic is <stdint.h>, which is required for C99. Older versions - * of the Windows compilers might not have this. However, latest versions of - * MS Studio have a functional <stdint.h>. If this impacts you, just upgrade - * your tool chain. - */ +// We require some standard C header files. The only one of these that might +// be problematic is <stdint.h>, which is required for C99. Older versions +// of the Windows compilers might not have this. However, latest versions of +// MS Studio have a functional <stdint.h>. If this impacts you, just upgrade +// your tool chain. #include <stdarg.h> #include <stddef.h> #include <stdint.h> -/* - * These are the APIs that a platform must implement to support nng. - */ - -/* - * A word about fork-safety: This library is *NOT* fork safe, in that - * functions may not be called in the child process without an intervening - * exec(). The library attempts to detect this situation, and crashes the - * process with an error message if it encounters it. (See nn_platform_init - * below.) - * - * Additionally, some file descriptors may leak across fork even to - * child processes. We make every reasonable effort to ensure that this - * does not occur, but on some platforms there are unavoidable race - * conditions between file creation and marking the file close-on-exec. - * - * Forkers should use posix_spawn() if possible, and as much as possible - * arrange for file close on exec by posix_spawn, or close the descriptors - * they do not need in the child. - */ - -/* - * nni_plat_abort crashes the system; it should do whatever is appropriate - * for abnormal programs on the platform, such as calling abort(). - */ +// These are the APIs that a platform must implement to support nng. + +// A word about fork-safety: This library is *NOT* fork safe, in that +// functions may not be called in the child process without an intervening +// exec(). The library attempts to detect this situation, and crashes the +// process with an error message if it encounters it. (See nn_platform_init +// below.) +// +// Additionally, some file descriptors may leak across fork even to +// child processes. We make every reasonable effort to ensure that this +// does not occur, but on some platforms there are unavoidable race +// conditions between file creation and marking the file close-on-exec. +// +// Forkers should use posix_spawn() if possible, and as much as possible +// arrange for file close on exec by posix_spawn, or close the descriptors +// they do not need in the child. (Note that posix_spawn() does *NOT* +// arrange for pthread_atfork() handlers to be called on some platforms.) + +// nni_plat_abort crashes the system; it should do whatever is appropriate +// for abnormal programs on the platform, such as calling abort(). extern void nni_plat_abort(void); -/* - * nni_plat_vnsprintf is exactly like its POSIX counterpart. - * Some platforms (Windows!) need a special version of this. - */ -extern void nni_plat_vsnprintf(char *, size_t, const char *, va_list); - -/* - * nni_plat_println is used to emit debug messages. Typically this is used - * during core debugging, or to emit panic messages. Message content will - * not contain newlines, but the output will add them. - */ +// nni_plat_println is used to emit debug messages. Typically this is used +// during core debugging, or to emit panic messages. Message content will +// not contain newlines, but the output will add them. extern void nni_plat_println(const char *); -/* - * nni_alloc allocates memory. In most cases this can just be malloc(). - * However, you may provide a different allocator, for example it is - * possible to use a slab allocator or somesuch. It is permissible for this - * to return NULL if memory cannot be allocated. - */ +// nni_alloc allocates memory. In most cases this can just be malloc(). +// However, you may provide a different allocator, for example it is +// possible to use a slab allocator or somesuch. It is permissible for this +// to return NULL if memory cannot be allocated. extern void *nni_alloc(size_t); -/* - * nni_free frees memory allocated with nni_alloc. It takes a size because - * some allocators do not track size, or can operate more efficiently if - * the size is provided with the free call. Examples of this are slab - * allocators like this found in Solaris/illumos (see libumem or kmem). - * This routine does nothing if supplied with a NULL pointer and zero size. - * Most implementations can just call free() here. - */ +// nni_free frees memory allocated with nni_alloc. It takes a size because +// some allocators do not track size, or can operate more efficiently if +// the size is provided with the free call. Examples of this are slab +// allocators like this found in Solaris/illumos (see libumem or kmem). +// This routine does nothing if supplied with a NULL pointer and zero size. +// Most implementations can just call free() here. extern void nni_free(void *, size_t); typedef struct nni_mutex * nni_mutex_t; typedef struct nni_cond * nni_cond_t; -/* - * Mutex handling. - */ +// Mutex handling. extern int nni_mutex_create(nni_mutex_t *); extern void nni_mutex_destroy(nni_mutex_t); @@ -95,90 +74,69 @@ extern int nni_mutex_tryenter(nni_mutex_t); extern int nni_cond_create(nni_cond_t *, nni_mutex_t); extern void nni_cond_destroy(nni_cond_t); -/* - * nni_cond_broadcast wakes all waiters on the condition. This should be - * called with the lock held. - */ +// nni_cond_broadcast wakes all waiters on the condition. This should be +// called with the lock held. extern void nni_cond_broadcast(nni_cond_t); -/* - * nni_cond_signal wakes a signal waiter. - */ +// nni_cond_signal wakes a signal waiter. extern void nni_cond_signal(nni_cond_t); -/* - * nni_condwait waits for a wake up on the condition variable. The - * associated lock is atomically released and reacquired upon wake up. - * Callers can be spuriously woken. The associated lock must be held. - */ +// nni_cond_wait waits for a wake up on the condition variable. The +// associated lock is atomically released and reacquired upon wake up. +// Callers can be spuriously woken. The associated lock must be held. extern void nni_cond_wait(nni_cond_t); -/* - * nni_cond_timedwait waits for a wakeup on the condition variable, just - * as with nni_condwait, but it will also wake after the given number of - * microseconds has passed. (This is a relative timed wait.) Early - * wakeups are permitted, and the caller must take care to double check any - * conditions. The return value is 0 on success, or an error code, which - * can be NNG_ETIMEDOUT. Note that it is permissible to wait for longer - * than the timeout based on the resolution of your system clock. - */ +// nni_cond_timedwait waits for a wakeup on the condition variable, just +// as with nni_condwait, but it will also wake after the given number of +// microseconds has passed. (This is a relative timed wait.) Early +// wakeups are permitted, and the caller must take care to double check any +// conditions. The return value is 0 on success, or an error code, which +// can be NNG_ETIMEDOUT. Note that it is permissible to wait for longer +// than the timeout based on the resolution of your system clock. extern int nni_cond_timedwait(nni_cond_t, uint64_t); typedef struct nni_thread * nni_thread_t; -/* - * nni_thread_creates a thread that runs the given function. The thread - * receives a single argument. - */ +// nni_thread_creates a thread that runs the given function. The thread +// receives a single argument. extern int nni_thread_create(nni_thread_t *, void (*fn)(void *), void *); -/* - * nni_thread_reap waits for the thread to exit, and then releases any - * resources associated with the thread. After this returns, it - * is an error to reference the thread in any further way. - */ +// nni_thread_reap waits for the thread to exit, and then releases any +// resources associated with the thread. After this returns, it +// is an error to reference the thread in any further way. extern void nni_thread_reap(nni_thread_t); -/* - * nn_clock returns a number of microseconds since some arbitrary time - * in the past. The values returned by nni_clock may be used with - * nni_cond_timedwait. - */ +// nn_clock returns a number of microseconds since some arbitrary time +// in the past. The values returned by nni_clock may be used with +// nni_cond_timedwait. extern uint64_t nni_clock(void); -/* - * nni_usleep sleeps for the specified number of microseconds (at least). - */ +// nni_usleep sleeps for the specified number of microseconds (at least). extern void nni_usleep(uint64_t); -/* - * nni_platform_init is called to allow the platform the chance to - * do any necessary initialization. This routine MUST be idempotent, - * and threadsafe, and will be called before any other API calls, and - * may be called at any point thereafter. It is permitted to return - * an error if some critical failure inializing the platform occurs, - * but once this succeeds, all future calls must succeed as well, unless - * nni_plat_fini has been called. - * - * The function argument should be called if the platform has not initialized - * (i.e. exactly once please), and its result passed back to the caller. - */ +// nni_platform_init is called to allow the platform the chance to +// do any necessary initialization. This routine MUST be idempotent, +// and threadsafe, and will be called before any other API calls, and +// may be called at any point thereafter. It is permitted to return +// an error if some critical failure inializing the platform occurs, +// but once this succeeds, all future calls must succeed as well, unless +// nni_plat_fini has been called. +// +// The function argument should be called if the platform has not initialized +// (i.e. exactly once please), and its result passed back to the caller. +// extern int nni_plat_init(int (*)(void)); -/* - * nni_platform_fini is called to clean up resources. It is intended to - * be called as the last thing executed in the library, and no other functions - * will be called until nni_platform_init is called. - */ +// nni_platform_fini is called to clean up resources. It is intended to +// be called as the last thing executed in the library, and no other functions +// will be called until nni_platform_init is called. extern void nni_plat_fini(void); -/* - * Actual platforms we support. - */ +// Actual platforms we support. #if defined(PLATFORM_POSIX) #include "platform/posix/posix_impl.h" #else #error "unknown platform" #endif -#endif /* CORE_PLATFORM_H */ +#endif // CORE_PLATFORM_H diff --git a/src/core/snprintf.c b/src/core/snprintf.c deleted file mode 100644 index be002e57..00000000 --- a/src/core/snprintf.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2016 Garrett D'Amore <garrett@damore.org> - * - * This software is supplied under the terms of the MIT License, a - * copy of which should be located in the distribution where this - * file was obtained (LICENSE.txt). A copy of the license may also be - * found online at https://opensource.org/licenses/MIT. - */ - -#include <stdarg.h> -#include <stdint.h> -#include <stdlib.h> - -#include "core/nng_impl.h" - -void -nni_snprintf(char *dst, size_t sz, const char *fmt, ...) -{ - va_list va; - - va_start(va, fmt); - nni_vsnprintf(dst, sz, fmt, va); - va_end(va); -} - - -void -nni_vsnprintf(char *dst, size_t sz, const char *fmt, va_list va) -{ - nni_plat_vsnprintf(dst, sz, fmt, va); -} diff --git a/src/core/snprintf.h b/src/core/snprintf.h deleted file mode 100644 index 66028de3..00000000 --- a/src/core/snprintf.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2016 Garrett D'Amore <garrett@damore.org> - * - * This software is supplied under the terms of the MIT License, a - * copy of which should be located in the distribution where this - * file was obtained (LICENSE.txt). A copy of the license may also be - * found online at https://opensource.org/licenses/MIT. - */ - -#ifndef CORE_SNPRINTF_H -#define CORE_SNPRINTF_H - -#include <stddef.h> -#include <stdarg.h> - -/* - * We have our own snprintf, because some platforms lack this, while - * others need special handling. Ours just calls the vsnprintf version - * from the platform. - */ -extern void nni_snprintf(char *, size_t, const char *, ...); -extern void nni_vsnprintf(char *, size_t, const char *, va_list); - -#endif /* CORE_SNPRINTF_H */ diff --git a/src/platform/posix/posix_vsnprintf.c b/src/platform/posix/posix_vsnprintf.c deleted file mode 100644 index d8191a90..00000000 --- a/src/platform/posix/posix_vsnprintf.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2016 Garrett D'Amore <garrett@damore.org> - * - * This software is supplied under the terms of the MIT License, a - * copy of which should be located in the distribution where this - * file was obtained (LICENSE.txt). A copy of the license may also be - * found online at https://opensource.org/licenses/MIT. - */ - -#include "core/nng_impl.h" - -#ifdef PLATFORM_POSIX_VSNPRINTF - -#include <stdarg.h> -#include <stdio.h> - -void -nni_plat_vsnprintf(char *dst, size_t sz, const char *fmt, va_list va) -{ - (void) vsnprintf(dst, sz, fmt, va); -} - - -#endif diff --git a/src/transport/inproc/inproc.c b/src/transport/inproc/inproc.c index b031a5bc..49b9de26 100644 --- a/src/transport/inproc/inproc.c +++ b/src/transport/inproc/inproc.c @@ -1,105 +1,108 @@ -/* - * Copyright 2016 Garrett D'Amore <garrett@damore.org> - * - * This software is supplied under the terms of the MIT License, a - * copy of which should be located in the distribution where this - * file was obtained (LICENSE.txt). A copy of the license may also be - * found online at https://opensource.org/licenses/MIT. - */ +// +// Copyright 2016 Garrett D'Amore <garrett@damore.org> +// +// This software is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// #include <stdlib.h> #include <string.h> +#include <stdio.h> #include "core/nng_impl.h" -/* - * Inproc transport. This just transports messages from one - * peer to another. - */ +// Inproc transport. This just transports messages from one +// peer to another. The inproc transport is only valid within the same +// process. -typedef struct inproc_pair * inproc_pair_t; -typedef struct inproc_pipe * inproc_pipe_t; -typedef struct inproc_ep * inproc_ep_t; +typedef struct nni_inproc_pair nni_inproc_pair; +typedef struct nni_inproc_pipe nni_inproc_pipe; +typedef struct nni_inproc_ep nni_inproc_ep; typedef struct { nni_mutex_t mx; nni_cond_t cv; nni_list_t eps; -} inproc_global_t; - -struct inproc_pipe { - const char * addr; - inproc_pair_t pair; - nni_msgqueue_t rq; - nni_msgqueue_t wq; - uint16_t peer; +} nni_inproc_global; + +// nni_inproc_pipe represents one half of a connection. +struct nni_inproc_pipe { + const char * addr; + nni_inproc_pair * pair; + nni_msgqueue_t rq; + nni_msgqueue_t wq; + uint16_t peer; }; -struct inproc_pair { - nni_mutex_t mx; - int refcnt; - nni_msgqueue_t q[2]; - struct inproc_pipe pipe[2]; - char addr[NNG_MAXADDRLEN]; +// nni_inproc_pair represents a pair of pipes. Because we control both +// sides of the pipes, we can allocate and free this in one structure. +struct nni_inproc_pair { + nni_mutex_t mx; + int refcnt; + nni_msgqueue_t q[2]; + nni_inproc_pipe pipe[2]; + char addr[NNG_MAXADDRLEN+1]; }; -struct inproc_ep { - char addr[NNG_MAXADDRLEN]; +struct nni_inproc_ep { + char addr[NNG_MAXADDRLEN+1]; int mode; int closed; nni_list_node_t node; uint16_t proto; - void * cpipe; /* connected pipe (DIAL only) */ + void * cpipe; // connected pipe (DIAL only) }; -#define INPROC_EP_IDLE 0 -#define INPROC_EP_DIAL 1 -#define INPROC_EP_LISTEN 2 +#define NNI_INPROC_EP_IDLE 0 +#define NNI_INPROC_EP_DIAL 1 +#define NNI_INPROC_EP_LISTEN 2 -/* - * Global inproc state - this contains the list of active endpoints - * which we use for coordinating rendezvous. - */ -static inproc_global_t inproc; +// nni_inproc is our global state - this contains the list of active endpoints +// which we use for coordinating rendezvous. +static nni_inproc_global nni_inproc; static int -inproc_init(void) +nni_inproc_init(void) { int rv; - if ((rv = nni_mutex_create(&inproc.mx)) != 0) { + if ((rv = nni_mutex_create(&nni_inproc.mx)) != 0) { return (rv); } - if ((rv = nni_cond_create(&inproc.cv, inproc.mx)) != 0) { - nni_mutex_destroy(inproc.mx); + if ((rv = nni_cond_create(&nni_inproc.cv, nni_inproc.mx)) != 0) { + nni_mutex_destroy(nni_inproc.mx); return (rv); } - NNI_LIST_INIT(&inproc.eps, struct inproc_ep, node); + NNI_LIST_INIT(&nni_inproc.eps, nni_inproc_ep, node); return (0); } static void -inproc_fini(void) +nni_inproc_fini(void) { - nni_cond_destroy(inproc.cv); - nni_mutex_destroy(inproc.mx); + nni_cond_destroy(nni_inproc.cv); + nni_mutex_destroy(nni_inproc.mx); } static void -inproc_pipe_close(void *arg) +nni_inproc_pipe_close(void *arg) { - inproc_pipe_t pipe = arg; + nni_inproc_pipe *pipe = arg; nni_msgqueue_close(pipe->rq); nni_msgqueue_close(pipe->wq); } +// nni_inproc_pair destroy is called when both pipe-ends of the pipe +// have been destroyed. static void -inproc_pair_destroy(inproc_pair_t pair) +nni_inproc_pair_destroy(nni_inproc_pair *pair) { if (pair == NULL) { return; @@ -118,19 +121,19 @@ inproc_pair_destroy(inproc_pair_t pair) static void -inproc_pipe_destroy(void *arg) +nni_inproc_pipe_destroy(void *arg) { - inproc_pipe_t pipe = arg; - inproc_pair_t pair = pipe->pair; + nni_inproc_pipe *pipe = arg; + nni_inproc_pair *pair = pipe->pair; - /* We could assert the pipe closed... */ + // We could assert the pipe closed... - /* If we are the last peer, then toss the pair structure. */ + // If we are the last peer, then toss the pair structure. nni_mutex_enter(pair->mx); pair->refcnt--; if (pair->refcnt == 0) { nni_mutex_exit(pair->mx); - inproc_pair_destroy(pair); + nni_inproc_pair_destroy(pair); } else { nni_mutex_exit(pair->mx); } @@ -138,40 +141,38 @@ inproc_pipe_destroy(void *arg) static int -inproc_pipe_send(void *arg, nng_msg_t msg) +nni_inproc_pipe_send(void *arg, nng_msg_t msg) { - inproc_pipe_t pipe = arg; + nni_inproc_pipe *pipe = arg; - /* - * TODO: look at the message expiration and use that to set up - * the timeout. (And if it expired already, throw it away.) - */ + // TODO: look at the message expiration and use that to set up + // the timeout. (And if it expired already, throw it away.) return (nni_msgqueue_put(pipe->wq, msg, -1)); } static int -inproc_pipe_recv(void *arg, nng_msg_t *msgp) +nni_inproc_pipe_recv(void *arg, nng_msg_t *msgp) { - inproc_pipe_t pipe = arg; + nni_inproc_pipe *pipe = arg; return (nni_msgqueue_get(pipe->rq, msgp, -1)); } static uint16_t -inproc_pipe_peer(void *arg) +nni_inproc_pipe_peer(void *arg) { - inproc_pipe_t pipe = arg; + nni_inproc_pipe *pipe = arg; return (pipe->peer); } static int -inproc_pipe_getopt(void *arg, int option, void *buf, size_t *szp) +nni_inproc_pipe_getopt(void *arg, int option, void *buf, size_t *szp) { - inproc_pipe_t pipe = arg; + nni_inproc_pipe *pipe = arg; size_t len; switch (option) { @@ -191,9 +192,9 @@ inproc_pipe_getopt(void *arg, int option, void *buf, size_t *szp) static int -inproc_ep_create(void **epp, const char *url, uint16_t proto) +nni_inproc_ep_create(void **epp, const char *url, uint16_t proto) { - inproc_ep_t ep; + nni_inproc_ep *ep; if (strlen(url) > NNG_MAXADDRLEN-1) { return (NNG_EINVAL); @@ -202,20 +203,20 @@ inproc_ep_create(void **epp, const char *url, uint16_t proto) return (NNG_ENOMEM); } - ep->mode = INPROC_EP_IDLE; + ep->mode = NNI_INPROC_EP_IDLE; ep->closed = 0; ep->proto = proto; - nni_list_node_init(&inproc.eps, ep); - nni_snprintf(ep->addr, sizeof (ep->addr), "%s", url); + nni_list_node_init(&nni_inproc.eps, ep); + (void) snprintf(ep->addr, sizeof (ep->addr), "%s", url); *epp = ep; return (0); } static void -inproc_ep_destroy(void *arg) +nni_inproc_ep_destroy(void *arg) { - inproc_ep_t ep = arg; + nni_inproc_ep *ep = arg; if (!ep->closed) { nni_panic("inproc_ep_destroy while not closed!"); @@ -225,33 +226,33 @@ inproc_ep_destroy(void *arg) static void -inproc_ep_close(void *arg) +nni_inproc_ep_close(void *arg) { - inproc_ep_t ep = arg; + nni_inproc_ep *ep = arg; - nni_mutex_enter(inproc.mx); + nni_mutex_enter(nni_inproc.mx); if (!ep->closed) { ep->closed = 1; - nni_list_remove(&inproc.eps, ep); - nni_cond_broadcast(inproc.cv); + nni_list_remove(&nni_inproc.eps, ep); + nni_cond_broadcast(nni_inproc.cv); } - nni_mutex_exit(inproc.mx); + nni_mutex_exit(nni_inproc.mx); } static int -inproc_ep_dial(void *arg, void **pipep) +nni_inproc_ep_dial(void *arg, void **pipep) { - inproc_ep_t ep = arg; - inproc_ep_t srch; - nni_list_t *list = &inproc.eps; + nni_inproc_ep *ep = arg; + nni_inproc_ep *srch; + nni_list_t *list = &nni_inproc.eps; - if (ep->mode != INPROC_EP_IDLE) { + if (ep->mode != NNI_INPROC_EP_IDLE) { return (NNG_EINVAL); } - nni_mutex_enter(inproc.mx); + nni_mutex_enter(nni_inproc.mx); NNI_LIST_FOREACH (list, srch) { - if (srch->mode != INPROC_EP_LISTEN) { + if (srch->mode != NNI_INPROC_EP_LISTEN) { continue; } if (strcmp(srch->addr, ep->addr) == 0) { @@ -259,84 +260,84 @@ inproc_ep_dial(void *arg, void **pipep) } } if (srch == NULL) { - /* No listeners available. */ - nni_mutex_exit(inproc.mx); + // No listeners available. + nni_mutex_exit(nni_inproc.mx); return (NNG_ECONNREFUSED); } - ep->mode = INPROC_EP_DIAL; + ep->mode = NNI_INPROC_EP_DIAL; nni_list_append(list, ep); - nni_cond_broadcast(inproc.cv); + nni_cond_broadcast(nni_inproc.cv); for (;;) { if (ep->closed) { - /* Closer will have removed us from list. */ - nni_mutex_exit(inproc.mx); + // Closer will have removed us from list. + nni_mutex_exit(nni_inproc.mx); return (NNG_ECLOSED); } if (ep->cpipe != NULL) { break; } - nni_cond_wait(inproc.cv); + nni_cond_wait(nni_inproc.cv); } - /* NB: The acceptor or closer removes us from the list. */ - ep->mode = INPROC_EP_IDLE; + // NB: The acceptor or closer removes us from the list. + ep->mode = NNI_INPROC_EP_IDLE; *pipep = ep->cpipe; - nni_mutex_exit(inproc.mx); + nni_mutex_exit(nni_inproc.mx); return (ep->closed ? NNG_ECLOSED : 0); } static int -inproc_ep_listen(void *arg) +nni_inproc_ep_listen(void *arg) { - inproc_ep_t ep = arg; - inproc_ep_t srch; - nni_list_t *list = &inproc.eps; + nni_inproc_ep *ep = arg; + nni_inproc_ep *srch; + nni_list_t *list = &nni_inproc.eps; - if (ep->mode != INPROC_EP_IDLE) { + if (ep->mode != NNI_INPROC_EP_IDLE) { return (NNG_EINVAL); } - nni_mutex_enter(inproc.mx); + nni_mutex_enter(nni_inproc.mx); if (ep->closed) { - nni_mutex_exit(inproc.mx); + nni_mutex_exit(nni_inproc.mx); return (NNG_ECLOSED); } NNI_LIST_FOREACH (list, srch) { - if (srch->mode != INPROC_EP_LISTEN) { + if (srch->mode != NNI_INPROC_EP_LISTEN) { continue; } if (strcmp(srch->addr, ep->addr) == 0) { - nni_mutex_exit(inproc.mx); + nni_mutex_exit(nni_inproc.mx); return (NNG_EADDRINUSE); } } - ep->mode = INPROC_EP_LISTEN; + ep->mode = NNI_INPROC_EP_LISTEN; nni_list_append(list, ep); - nni_mutex_exit(inproc.mx); + nni_mutex_exit(nni_inproc.mx); return (0); } static int -inproc_ep_accept(void *arg, void **pipep) +nni_inproc_ep_accept(void *arg, void **pipep) { - inproc_ep_t ep = arg; - inproc_ep_t srch; - inproc_pair_t pair; - nni_list_t *list = &inproc.eps; + nni_inproc_ep *ep = arg; + nni_inproc_ep *srch; + nni_inproc_pair *pair; + nni_list_t *list = &nni_inproc.eps; int rv; - nni_mutex_enter(inproc.mx); - if (ep->mode != INPROC_EP_LISTEN) { - nni_mutex_exit(inproc.mx); + nni_mutex_enter(nni_inproc.mx); + if (ep->mode != NNI_INPROC_EP_LISTEN) { + nni_mutex_exit(nni_inproc.mx); return (NNG_EINVAL); } for (;;) { if (ep->closed) { - nni_mutex_exit(inproc.mx); + nni_mutex_exit(nni_inproc.mx); return (NNG_ECLOSED); } NNI_LIST_FOREACH (list, srch) { - if (srch->mode != INPROC_EP_DIAL) { + if (srch->mode != NNI_INPROC_EP_DIAL) { continue; } if (strcmp(srch->addr, ep->addr) == 0) { @@ -346,18 +347,18 @@ inproc_ep_accept(void *arg, void **pipep) if (srch != NULL) { break; } - nni_cond_wait(inproc.cv); + nni_cond_wait(nni_inproc.cv); } if ((pair = nni_alloc(sizeof (*pair))) == NULL) { - nni_mutex_exit(inproc.mx); + nni_mutex_exit(nni_inproc.mx); return (NNG_ENOMEM); } if (((rv = nni_mutex_create(&pair->mx)) != 0) || ((rv = nni_msgqueue_create(&pair->q[0], 4)) != 0) || ((rv = nni_msgqueue_create(&pair->q[0], 4)) != 0)) { - inproc_pair_destroy(pair); + nni_inproc_pair_destroy(pair); } - nni_snprintf(pair->addr, sizeof (pair->addr), "%s", ep->addr); + (void) snprintf(pair->addr, sizeof (pair->addr), "%s", ep->addr); pair->pipe[0].rq = pair->pipe[1].wq = pair->q[0]; pair->pipe[1].rq = pair->pipe[0].wq = pair->q[1]; pair->pipe[0].pair = pair->pipe[1].pair = pair; @@ -367,38 +368,40 @@ inproc_ep_accept(void *arg, void **pipep) pair->refcnt = 2; srch->cpipe = &pair->pipe[0]; *pipep = &pair->pipe[1]; - nni_cond_broadcast(inproc.cv); + nni_cond_broadcast(nni_inproc.cv); - nni_mutex_exit(inproc.mx); + nni_mutex_exit(nni_inproc.mx); return (0); } -static struct nni_pipe_ops inproc_pipe_ops = { - inproc_pipe_destroy, - inproc_pipe_send, - inproc_pipe_recv, - inproc_pipe_close, - inproc_pipe_peer, - inproc_pipe_getopt, +static struct nni_pipe_ops nni_inproc_pipe_ops = { + nni_inproc_pipe_destroy, + nni_inproc_pipe_send, + nni_inproc_pipe_recv, + nni_inproc_pipe_close, + nni_inproc_pipe_peer, + nni_inproc_pipe_getopt, }; -static struct nni_endpt_ops inproc_ep_ops = { - inproc_ep_create, - inproc_ep_destroy, - inproc_ep_dial, - inproc_ep_listen, - inproc_ep_accept, - inproc_ep_close, - NULL, /* inproc_ep_setopt */ - NULL, /* inproc_ep_getopt */ +static struct nni_endpt_ops nni_inproc_ep_ops = { + nni_inproc_ep_create, + nni_inproc_ep_destroy, + nni_inproc_ep_dial, + nni_inproc_ep_listen, + nni_inproc_ep_accept, + nni_inproc_ep_close, + NULL, // inproc_ep_setopt + NULL, // inproc_ep_getopt }; +// This is the inproc transport linkage, and should be the only global +// symbol in this entire file. struct nni_transport nni_inproc_transport = { - "inproc", /* tran_scheme */ - &inproc_ep_ops, - &inproc_pipe_ops, - inproc_init, /* tran_init */ - inproc_fini, /* tran_fini */ + "inproc", // tran_scheme + &nni_inproc_ep_ops, // tran_ep_ops + &nni_inproc_pipe_ops, // tran_pipe_ops + nni_inproc_init, // tran_init + nni_inproc_fini, // tran_fini }; |
