diff options
| -rw-r--r-- | src/core/defs.h | 7 | ||||
| -rw-r--r-- | src/core/endpt.c | 9 | ||||
| -rw-r--r-- | src/core/init.c | 8 | ||||
| -rw-r--r-- | src/core/pipe.c | 22 | ||||
| -rw-r--r-- | src/core/pipe.h | 5 | ||||
| -rw-r--r-- | src/core/socket.c | 11 | ||||
| -rw-r--r-- | src/core/transport.c | 37 | ||||
| -rw-r--r-- | src/core/transport.h | 8 | ||||
| -rw-r--r-- | src/transport/inproc/inproc.c | 2 |
9 files changed, 55 insertions, 54 deletions
diff --git a/src/core/defs.h b/src/core/defs.h index 7c9090d0..d0d0df7b 100644 --- a/src/core/defs.h +++ b/src/core/defs.h @@ -25,12 +25,15 @@ typedef struct nng_msg nni_msg; // REMOVE THESE typedef struct nng_endpt nni_endpt; - -// These are our own names. typedef struct nni_transport nni_transport; typedef struct nni_endpt_ops nni_endpt_ops; typedef struct nni_pipe_ops nni_pipe_ops; +// These are our own names. +typedef struct nni_tran nni_tran; +typedef struct nni_tran_ep nni_tran_ep; +typedef struct nni_tran_pipe nni_tran_pipe; + typedef struct nni_protocol nni_protocol; typedef int nni_signal; // Turnstile/wakeup channel. diff --git a/src/core/endpt.c b/src/core/endpt.c index 0ff31380..63013652 100644 --- a/src/core/endpt.c +++ b/src/core/endpt.c @@ -18,11 +18,11 @@ int nni_endpt_create(nni_endpt **epp, nni_sock *sock, const char *addr) { - nni_transport *tran; + nni_tran *tran; nni_endpt *ep; int rv; - if ((tran = nni_transport_find(addr)) == NULL) { + if ((tran = nni_tran_find(addr)) == NULL) { return (NNG_ENOTSUP); } if (strlen(addr) >= NNG_MAXADDRLEN) { @@ -104,7 +104,7 @@ nni_endpt_connect(nni_endpt *ep, nni_pipe **pp) if ((rv = nni_pipe_create(&pipe, ep)) != 0) { return (rv); } - rv = ep->ep_ops.ep_connect(ep->ep_data, &pipe->p_trandata); + rv = ep->ep_ops.ep_connect(ep->ep_data, &pipe->p_tran_data); if (rv != 0) { nni_pipe_close(pipe); return (rv); @@ -240,7 +240,8 @@ nni_endpt_accept(nni_endpt *ep, nni_pipe **pp) if ((rv = nni_pipe_create(&pipe, ep)) != 0) { return (rv); } - if ((rv = ep->ep_ops.ep_accept(ep->ep_data, &pipe->p_trandata)) != 0) { + rv = ep->ep_ops.ep_accept(ep->ep_data, &pipe->p_tran_data); + if (rv != 0) { nni_pipe_close(pipe); return (rv); } diff --git a/src/core/init.c b/src/core/init.c index 500a0b54..3ae10a21 100644 --- a/src/core/init.c +++ b/src/core/init.c @@ -12,9 +12,9 @@ #include <stdio.h> static int -init_helper(void) +nni_init_helper(void) { - nni_transport_init(); + nni_tran_init(); return (0); } @@ -22,13 +22,13 @@ init_helper(void) int nni_init(void) { - return (nni_plat_init(init_helper)); + return (nni_plat_init(nni_init_helper)); } void nni_fini(void) { - nni_transport_fini(); + nni_tran_fini(); nni_plat_fini(); } diff --git a/src/core/pipe.c b/src/core/pipe.c index 8cf83179..d673f7c4 100644 --- a/src/core/pipe.c +++ b/src/core/pipe.c @@ -25,14 +25,14 @@ nni_pipe_id(nni_pipe *p) int nni_pipe_send(nni_pipe *p, nng_msg *msg) { - return (p->p_ops.p_send(p->p_trandata, msg)); + return (p->p_tran_ops.p_send(p->p_tran_data, msg)); } int nni_pipe_recv(nni_pipe *p, nng_msg **msgp) { - return (p->p_ops.p_recv(p->p_trandata, msgp)); + return (p->p_tran_ops.p_recv(p->p_tran_data, msgp)); } @@ -44,8 +44,8 @@ nni_pipe_close(nni_pipe *p) { nni_sock *sock = p->p_sock; - if (p->p_trandata != NULL) { - p->p_ops.p_close(p->p_trandata); + if (p->p_tran_data != NULL) { + p->p_tran_ops.p_close(p->p_tran_data); } nni_mtx_lock(&sock->s_mx); @@ -63,7 +63,7 @@ nni_pipe_close(nni_pipe *p) uint16_t nni_pipe_peer(nni_pipe *p) { - return (p->p_ops.p_peer(p->p_trandata)); + return (p->p_tran_ops.p_peer(p->p_tran_data)); } @@ -73,8 +73,8 @@ nni_pipe_destroy(nni_pipe *p) nni_thr_fini(&p->p_send_thr); nni_thr_fini(&p->p_recv_thr); - if (p->p_trandata != NULL) { - p->p_ops.p_destroy(p->p_trandata); + if (p->p_tran_data != NULL) { + p->p_tran_ops.p_destroy(p->p_tran_data); } if (p->p_pdata != NULL) { nni_free(p->p_pdata, p->p_psize); @@ -95,8 +95,8 @@ nni_pipe_create(nni_pipe **pp, nni_endpt *ep) return (NNG_ENOMEM); } p->p_sock = sock; - p->p_ops = *ep->ep_ops.ep_pipe_ops; - p->p_trandata = NULL; + p->p_tran_ops = *ep->ep_ops.ep_pipe_ops; + p->p_tran_data = NULL; p->p_active = 0; p->p_psize = proto->proto_pipe_size; NNI_LIST_NODE_INIT(&p->p_node); @@ -132,10 +132,10 @@ int nni_pipe_getopt(nni_pipe *p, int opt, void *val, size_t *szp) { /* This should only be called with the mutex held... */ - if (p->p_ops.p_getopt == NULL) { + if (p->p_tran_ops.p_getopt == NULL) { return (NNG_ENOTSUP); } - return (p->p_ops.p_getopt(p->p_trandata, opt, val, szp)); + return (p->p_tran_ops.p_getopt(p->p_tran_data, opt, val, szp)); } diff --git a/src/core/pipe.h b/src/core/pipe.h index 193fd6c2..70dd01b1 100644 --- a/src/core/pipe.h +++ b/src/core/pipe.h @@ -14,12 +14,13 @@ // OUSIDE of the core is STRICTLY VERBOTEN. NO DIRECT ACCESS BY PROTOCOLS OR // TRANSPORTS. +#include "core/defs.h" #include "core/transport.h" struct nng_pipe { uint32_t p_id; - struct nni_pipe_ops p_ops; - void * p_trandata; + struct nni_pipe_ops p_tran_ops; + void * p_tran_data; void * p_pdata; // protocol specific data size_t p_psize; // size of protocol data nni_list_node p_node; diff --git a/src/core/socket.c b/src/core/socket.c index 77e68733..07955d0a 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -52,11 +52,6 @@ nni_reaper(void *arg) } nni_mtx_unlock(&sock->s_mx); - // This should already have been done. - if (pipe->p_trandata != NULL) { - pipe->p_ops.p_close(pipe->p_trandata); - } - // Remove the pipe from the protocol. Protocols may // keep lists of pipes for managing their topologies. // Note that if a protocol has rejected the pipe, it @@ -215,9 +210,9 @@ nni_sock_close(nni_sock *sock) // Go through and schedule close on all pipes. while ((pipe = nni_list_first(&sock->s_pipes)) != NULL) { - nni_list_remove(&sock->s_pipes, pipe); - pipe->p_reap = 1; - nni_list_append(&sock->s_reaps, pipe); + nni_mtx_unlock(&sock->s_mx); + nni_pipe_close(pipe); + nni_mtx_lock(&sock->s_mx); } nni_cv_wake(&sock->s_cv); diff --git a/src/core/transport.c b/src/core/transport.c index 2e8dee7a..b6ebe3c2 100644 --- a/src/core/transport.c +++ b/src/core/transport.c @@ -13,29 +13,30 @@ // For now the list of transports is hard-wired. Adding new transports // to the system dynamically is something that might be considered later. -extern nni_transport nni_inproc_transport; +extern nni_tran nni_inproc_tran; -static nni_transport *transports[] = { - &nni_inproc_transport, +static nni_tran *transports[] = { + &nni_inproc_tran, NULL }; -nni_transport * -nni_transport_find(const char *addr) +nni_tran * +nni_tran_find(const char *addr) { // address is of the form "<scheme>://blah..." const char *end; int len; int i; - nni_transport *ops; + nni_tran *tran; if ((end = strstr(addr, "://")) == NULL) { return (NULL); } len = (int) (end - addr); - for (i = 0; (ops = transports[i]) != NULL; i++) { - if (strncmp(addr, ops->tran_scheme, len) == 0) { - return (ops); + for (i = 0; (tran = transports[i]) != NULL; i++) { + if ((strncmp(addr, tran->tran_scheme, len) == 0) && + (tran->tran_scheme[len] == '\0')) { + return (tran); } } return (NULL); @@ -45,26 +46,26 @@ nni_transport_find(const char *addr) // nni_transport_init initializes the entire transport subsystem, including // each individual transport. void -nni_transport_init(void) +nni_tran_init(void) { int i; - nni_transport *ops; + nni_tran *tran; - for (i = 0; (ops = transports[i]) != NULL; i++) { - ops->tran_init(); + for (i = 0; (tran = transports[i]) != NULL; i++) { + tran->tran_init(); } } void -nni_transport_fini(void) +nni_tran_fini(void) { int i; - nni_transport *ops; + nni_tran *tran; - for (i = 0; (ops = transports[i]) != NULL; i++) { - if (ops->tran_fini != NULL) { - ops->tran_fini(); + for (i = 0; (tran = transports[i]) != NULL; i++) { + if (tran->tran_fini != NULL) { + tran->tran_fini(); } } } diff --git a/src/core/transport.h b/src/core/transport.h index c0bade07..c738929c 100644 --- a/src/core/transport.h +++ b/src/core/transport.h @@ -13,7 +13,7 @@ // Transport implementation details. Transports must implement the // interfaces in this file. -struct nni_transport { +struct nni_tran { // tran_scheme is the transport scheme, such as "tcp" or "inproc". const char * tran_scheme; @@ -119,8 +119,8 @@ struct nni_pipe_ops { // These APIs are used by the framework internally, and not for use by // transport implementations. -extern nni_transport *nni_transport_find(const char *); -extern void nni_transport_init(void); -extern void nni_transport_fini(void); +extern nni_tran *nni_tran_find(const char *); +extern void nni_tran_init(void); +extern void nni_tran_fini(void); #endif // CORE_TRANSPORT_H diff --git a/src/transport/inproc/inproc.c b/src/transport/inproc/inproc.c index 688518b3..fe45e78e 100644 --- a/src/transport/inproc/inproc.c +++ b/src/transport/inproc/inproc.c @@ -414,7 +414,7 @@ static struct nni_endpt_ops nni_inproc_ep_ops = { // This is the inproc transport linkage, and should be the only global // symbol in this entire file. -struct nni_transport nni_inproc_transport = { +struct nni_tran nni_inproc_tran = { .tran_scheme = "inproc", .tran_ep_ops = &nni_inproc_ep_ops, .tran_init = nni_inproc_init, |
