Skip to content

Commit

Permalink
tls: use nni_aio_begin
Browse files Browse the repository at this point in the history
  • Loading branch information
gdamore committed Dec 26, 2024
1 parent 35e77bd commit aada131
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 62 deletions.
41 changes: 11 additions & 30 deletions src/sp/transport/tls/tls.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,19 +458,11 @@ static void
tlstran_pipe_send(void *arg, nni_aio *aio)
{
tlstran_pipe *p = arg;
int rv;

if (nni_aio_begin(aio) != 0) {
// No way to give the message back to the protocol, so
// we just discard it silently to prevent it from leaking.
nni_msg_free(nni_aio_get_msg(aio));
nni_aio_set_msg(aio, NULL);
return;
}
nni_aio_reset(aio);
nni_mtx_lock(&p->mtx);
if ((rv = nni_aio_schedule(aio, tlstran_pipe_send_cancel, p)) != 0) {
if (!nni_aio_start(aio, tlstran_pipe_send_cancel, p)) {
nni_mtx_unlock(&p->mtx);
nni_aio_finish_error(aio, rv);
return;
}
nni_list_append(&p->sendq, aio);
Expand Down Expand Up @@ -523,15 +515,11 @@ static void
tlstran_pipe_recv(void *arg, nni_aio *aio)
{
tlstran_pipe *p = arg;
int rv;

if (nni_aio_begin(aio) != 0) {
return;
}
nni_aio_reset(aio);
nni_mtx_lock(&p->mtx);
if ((rv = nni_aio_schedule(aio, tlstran_pipe_recv_cancel, p)) != 0) {
if (!nni_aio_start(aio, tlstran_pipe_recv_cancel, p)) {
nni_mtx_unlock(&p->mtx);
nni_aio_finish_error(aio, rv);
return;
}

Expand Down Expand Up @@ -681,7 +669,9 @@ tlstran_accept_cb(void *arg)
nni_aio_finish_error(aio, rv);
}
switch (rv) {

case NNG_ECLOSED:
case NNG_ESTOPPED:
break;
case NNG_ENOMEM:
case NNG_ENOFILES:
// We need to cool down here, to avoid spinning.
Expand Down Expand Up @@ -837,12 +827,8 @@ static void
tlstran_ep_connect(void *arg, nni_aio *aio)
{
tlstran_ep *ep = arg;
int rv;

if (nni_aio_begin(aio) != 0) {
return;
}

nni_aio_reset(aio);
nni_mtx_lock(&ep->mtx);
if (ep->closed) {
nni_mtx_unlock(&ep->mtx);
Expand All @@ -854,9 +840,8 @@ tlstran_ep_connect(void *arg, nni_aio *aio)
nni_aio_finish_error(aio, NNG_EBUSY);
return;
}
if ((rv = nni_aio_schedule(aio, tlstran_ep_cancel, ep)) != 0) {
if (!nni_aio_start(aio, tlstran_ep_cancel, ep)) {
nni_mtx_unlock(&ep->mtx);
nni_aio_finish_error(aio, rv);
return;
}
ep->useraio = aio;
Expand Down Expand Up @@ -888,11 +873,8 @@ static void
tlstran_ep_accept(void *arg, nni_aio *aio)
{
tlstran_ep *ep = arg;
int rv;

if (nni_aio_begin(aio) != 0) {
return;
}
nni_aio_reset(aio);
nni_mtx_lock(&ep->mtx);
if (ep->closed) {
nni_mtx_unlock(&ep->mtx);
Expand All @@ -904,9 +886,8 @@ tlstran_ep_accept(void *arg, nni_aio *aio)
nni_aio_finish_error(aio, NNG_EBUSY);
return;
}
if ((rv = nni_aio_schedule(aio, tlstran_ep_cancel, ep)) != 0) {
if (!nni_aio_start(aio, tlstran_ep_cancel, ep)) {
nni_mtx_unlock(&ep->mtx);
nni_aio_finish_error(aio, rv);
return;
}
ep->useraio = aio;
Expand Down
54 changes: 22 additions & 32 deletions src/supplemental/tls/tls_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ typedef struct {
nni_aio conn_aio; // system aio for connect/accept
nni_mtx lock;
bool closed;
nni_atomic_flag did_close;
bool hs_done;
nni_list send_queue;
nni_list recv_queue;
Expand Down Expand Up @@ -180,19 +181,16 @@ static void
tls_dialer_dial(void *arg, nng_aio *aio)
{
tls_dialer *d = arg;
int rv;
tls_conn *conn;
int rv;

if (nni_aio_begin(aio) != 0) {
return;
}
nni_aio_reset(aio);
if ((rv = tls_alloc(&conn, d->cfg, aio)) != 0) {
nni_aio_finish_error(aio, rv);
return;
}

if ((rv = nni_aio_schedule(aio, tls_conn_cancel, conn)) != 0) {
nni_aio_finish_error(aio, rv);
if (!nni_aio_start(aio, tls_conn_cancel, conn)) {
tls_free(conn);
return;
}
Expand Down Expand Up @@ -352,16 +350,13 @@ tls_listener_accept(void *arg, nng_aio *aio)
int rv;
tls_conn *conn;

if (nni_aio_begin(aio) != 0) {
return;
}
nni_aio_reset(aio);
if ((rv = tls_alloc(&conn, l->cfg, aio)) != 0) {
nni_aio_finish_error(aio, rv);
return;
}

if ((rv = nni_aio_schedule(aio, tls_conn_cancel, conn)) != 0) {
nni_aio_finish_error(aio, rv);
if (!nni_aio_start(aio, tls_conn_cancel, conn)) {
tls_free(conn);
return;
}
Expand Down Expand Up @@ -483,21 +478,17 @@ tls_cancel(nni_aio *aio, void *arg, int rv)
static void
tls_send(void *arg, nni_aio *aio)
{
int rv;
tls_conn *conn = arg;

if (nni_aio_begin(aio) != 0) {
return;
}
nni_aio_reset(aio);
nni_mtx_lock(&conn->lock);
if (conn->closed) {
if (!nni_aio_start(aio, tls_cancel, conn)) {
nni_mtx_unlock(&conn->lock);
nni_aio_finish_error(aio, NNG_ECLOSED);
return;
}
if ((rv = nni_aio_schedule(aio, tls_cancel, conn)) != 0) {
if (conn->closed) {
nni_mtx_unlock(&conn->lock);
nni_aio_finish_error(aio, rv);
nni_aio_finish_error(aio, NNG_ECLOSED);

Check warning on line 491 in src/supplemental/tls/tls_common.c

View check run for this annotation

Codecov / codecov/patch

src/supplemental/tls/tls_common.c#L491

Added line #L491 was not covered by tests
return;
}
nni_list_append(&conn->send_queue, aio);
Expand All @@ -508,21 +499,17 @@ tls_send(void *arg, nni_aio *aio)
static void
tls_recv(void *arg, nni_aio *aio)
{
int rv;
tls_conn *conn = arg;

if (nni_aio_begin(aio) != 0) {
return;
}
nni_aio_reset(aio);
nni_mtx_lock(&conn->lock);
if (conn->closed) {
if (!nni_aio_start(aio, tls_cancel, conn)) {
nni_mtx_unlock(&conn->lock);
nni_aio_finish_error(aio, NNG_ECLOSED);
return;
}
if ((rv = nni_aio_schedule(aio, tls_cancel, conn)) != 0) {
if (conn->closed) {
nni_mtx_unlock(&conn->lock);
nni_aio_finish_error(aio, rv);
nni_aio_finish_error(aio, NNG_ECLOSED);

Check warning on line 512 in src/supplemental/tls/tls_common.c

View check run for this annotation

Codecov / codecov/patch

src/supplemental/tls/tls_common.c#L512

Added line #L512 was not covered by tests
return;
}

Expand All @@ -536,11 +523,13 @@ tls_close(void *arg)
{
tls_conn *conn = arg;

nni_mtx_lock(&conn->lock);
conn->ops.close((void *) (conn + 1));
tls_tcp_error(conn, NNG_ECLOSED);
nni_mtx_unlock(&conn->lock);
nng_stream_close(conn->tcp);
if (!nni_atomic_flag_test_and_set(&conn->did_close)) {
nni_mtx_lock(&conn->lock);
conn->ops.close((void *) (conn + 1));
tls_tcp_error(conn, NNG_ECLOSED);
nni_mtx_unlock(&conn->lock);
nng_stream_close(conn->tcp);
}
}

static void
Expand Down Expand Up @@ -650,6 +639,7 @@ tls_alloc(tls_conn **conn_p, nng_tls_config *cfg, nng_aio *user_aio)
nni_aio_set_timeout(&conn->conn_aio, NNG_DURATION_INFINITE);
nni_aio_set_timeout(&conn->tcp_send, NNG_DURATION_INFINITE);
nni_aio_set_timeout(&conn->tcp_recv, NNG_DURATION_INFINITE);
nni_atomic_flag_reset(&conn->did_close);

conn->stream.s_close = tls_close;
conn->stream.s_free = tls_free;
Expand Down

0 comments on commit aada131

Please sign in to comment.