diff options
Diffstat (limited to 'src/datagram.c')
-rw-r--r-- | src/datagram.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/datagram.c b/src/datagram.c index 13f1b5c..d98221f 100644 --- a/src/datagram.c +++ b/src/datagram.c @@ -54,8 +54,11 @@ struct osmo_dgram_tx { * abstraction and close the socket */ void osmo_dgram_tx_close(struct osmo_dgram_tx *conn) { + if (conn->ofd.fd == -1) + return; osmo_fd_unregister(&conn->ofd); close(conn->ofd.fd); + conn->ofd.fd = -1; } static int osmo_dgram_tx_write(struct osmo_dgram_tx *conn) @@ -173,6 +176,7 @@ osmo_dgram_tx_set_data(struct osmo_dgram_tx *conn, void *data) * \param[in] conn Datagram Transmitter to destroy */ void osmo_dgram_tx_destroy(struct osmo_dgram_tx *conn) { + osmo_dgram_tx_close(conn); talloc_free(conn); } @@ -198,6 +202,7 @@ int osmo_dgram_tx_open(struct osmo_dgram_tx *conn) conn->ofd.fd = ret; if (osmo_fd_register(&conn->ofd) < 0) { close(ret); + conn->ofd.fd = -1; return -EIO; } return 0; @@ -317,10 +322,10 @@ void osmo_dgram_rx_set_read_cb(struct osmo_dgram_rx *conn, } /*! \brief Destroy the datagram receiver. Releases Memory. - * Caller must make sure to osmo_dgram_rx_close() before calling * \param[in] conn Datagram Receiver */ void osmo_dgram_rx_destroy(struct osmo_dgram_rx *conn) { + osmo_dgram_rx_close(conn); talloc_free(conn); } @@ -345,6 +350,7 @@ int osmo_dgram_rx_open(struct osmo_dgram_rx *conn) conn->ofd.fd = ret; if (osmo_fd_register(&conn->ofd) < 0) { close(ret); + conn->ofd.fd = -1; return -EIO; } return 0; @@ -356,8 +362,11 @@ int osmo_dgram_rx_open(struct osmo_dgram_rx *conn) * \param[in] conn Stream Server Link to close */ void osmo_dgram_rx_close(struct osmo_dgram_rx *conn) { + if (conn->ofd.fd == -1) + return; osmo_fd_unregister(&conn->ofd); close(conn->ofd.fd); + conn->ofd.fd = -1; } /* |