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);
|
||||
LOGSSRV(conn, LOGL_DEBUG, "message received (res=%d)\n", res);
|
||||
|
||||
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);
|
||||
return;
|
||||
}
|
||||
if (OSMO_UNLIKELY(res <= 0)) {
|
||||
/* This connection is dead, destroy it. */
|
||||
osmo_stream_srv_destroy(conn);
|
||||
} 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) {
|
||||
osmo_stream_srv_set_flush_and_destroy(conn);
|
||||
if (osmo_iofd_txqueue_len(iofd) == 0)
|
||||
osmo_stream_srv_destroy(conn);
|
||||
} else if (conn->iofd_read_cb) {
|
||||
conn->iofd_read_cb(conn, msg);
|
||||
if (conn->iofd_read_cb)
|
||||
conn->iofd_read_cb(conn, msg);
|
||||
else
|
||||
msgb_free(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);
|
||||
LOGSSRV(conn, LOGL_DEBUG, "connected write\n");
|
||||
|
||||
if (res == -1)
|
||||
if (res < 0)
|
||||
LOGSSRV(conn, LOGL_ERROR, "error to send: %s\n", strerror(errno));
|
||||
|
||||
if (osmo_iofd_txqueue_len(iofd) == 0)
|
||||
|
|
Loading…
Reference in New Issue