stream_srv: Fix connection error handling
If read returned an error or the stream got closed then simply destroy the connection. If the user code called osmo_stream_srv_set_flush_and_destroy() then ignore any incoming messages and destroy the connection once the tx queue is empty. Change-Id: I84eea2717f3762830f3f5b115e6fc8545eaa4fd5
This commit is contained in:
parent
0c4c47ddfb
commit
59a785b628
|
@ -532,18 +532,22 @@ static void stream_srv_iofd_read_cb(struct osmo_io_fd *iofd, int res, struct msg
|
||||||
struct osmo_stream_srv *conn = osmo_iofd_get_data(iofd);
|
struct osmo_stream_srv *conn = osmo_iofd_get_data(iofd);
|
||||||
LOGSSRV(conn, LOGL_DEBUG, "message received (res=%d)\n", res);
|
LOGSSRV(conn, LOGL_DEBUG, "message received (res=%d)\n", res);
|
||||||
|
|
||||||
if (conn->flags & OSMO_STREAM_SRV_F_FLUSH_DESTROY) {
|
if (OSMO_UNLIKELY(res <= 0)) {
|
||||||
LOGSSRV(conn, LOGL_INFO, "Connection is being flushed and closed; ignoring received message\n");
|
/* This connection is dead, destroy it. */
|
||||||
msgb_free(msg);
|
osmo_stream_srv_destroy(conn);
|
||||||
return;
|
} else {
|
||||||
}
|
if (conn->flags & OSMO_STREAM_SRV_F_FLUSH_DESTROY) {
|
||||||
|
LOGSSRV(conn, LOGL_INFO, "Connection is being flushed and closed; ignoring received message\n");
|
||||||
|
msgb_free(msg);
|
||||||
|
if (osmo_iofd_txqueue_len(iofd) == 0)
|
||||||
|
osmo_stream_srv_destroy(conn);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (res <= 0) {
|
if (conn->iofd_read_cb)
|
||||||
osmo_stream_srv_set_flush_and_destroy(conn);
|
conn->iofd_read_cb(conn, msg);
|
||||||
if (osmo_iofd_txqueue_len(iofd) == 0)
|
else
|
||||||
osmo_stream_srv_destroy(conn);
|
msgb_free(msg);
|
||||||
} else if (conn->iofd_read_cb) {
|
|
||||||
conn->iofd_read_cb(conn, msg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -552,7 +556,7 @@ static void stream_srv_iofd_write_cb(struct osmo_io_fd *iofd, int res, struct ms
|
||||||
struct osmo_stream_srv *conn = osmo_iofd_get_data(iofd);
|
struct osmo_stream_srv *conn = osmo_iofd_get_data(iofd);
|
||||||
LOGSSRV(conn, LOGL_DEBUG, "connected write\n");
|
LOGSSRV(conn, LOGL_DEBUG, "connected write\n");
|
||||||
|
|
||||||
if (res == -1)
|
if (res < 0)
|
||||||
LOGSSRV(conn, LOGL_ERROR, "error to send: %s\n", strerror(errno));
|
LOGSSRV(conn, LOGL_ERROR, "error to send: %s\n", strerror(errno));
|
||||||
|
|
||||||
if (osmo_iofd_txqueue_len(iofd) == 0)
|
if (osmo_iofd_txqueue_len(iofd) == 0)
|
||||||
|
|
Loading…
Reference in New Issue