Stefan Sperling has submitted this change and it was merged. ( https://gerrit.osmocom.org/11705 )
Change subject: detect freed connections in osmo_stream_srv_read() ...................................................................... detect freed connections in osmo_stream_srv_read() While we are processing a read event, the connection's callback might free the connection. Check for this and don't attempt to process further events on an already freed connection. Change-Id: I0a9c7d8e3263c73440f7084dbb1792a4ca5038f0 Related: OS#3685 Depends: g#11704 (for libosmo-sccp) --- M src/stream.c 1 file changed, 10 insertions(+), 7 deletions(-) Approvals: Jenkins Builder: Verified Pau Espin Pedrol: Looks good to me, approved diff --git a/src/stream.c b/src/stream.c index 6eb2313..4548414 100644 --- a/src/stream.c +++ b/src/stream.c @@ -784,19 +784,21 @@ int flags; }; -static void osmo_stream_srv_read(struct osmo_stream_srv *conn) +static int osmo_stream_srv_read(struct osmo_stream_srv *conn) { + int rc = 0; + LOGP(DLINP, LOGL_DEBUG, "message received\n"); if (conn->flags & OSMO_STREAM_SRV_F_FLUSH_DESTROY) { LOGP(DLINP, LOGL_DEBUG, "Connection is being flushed and closed; ignoring received message\n"); - return; + return 0; } if (conn->cb) - conn->cb(conn); + rc = conn->cb(conn); - return; + return rc; } static void osmo_stream_srv_write(struct osmo_stream_srv *conn) @@ -845,14 +847,15 @@ static int osmo_stream_srv_cb(struct osmo_fd *ofd, unsigned int what) { struct osmo_stream_srv *conn = ofd->data; + int rc = 0; LOGP(DLINP, LOGL_DEBUG, "connected read/write\n"); if (what & BSC_FD_READ) - osmo_stream_srv_read(conn); - if (what & BSC_FD_WRITE) + rc = osmo_stream_srv_read(conn); + if (rc != -EBADF && (what & BSC_FD_WRITE)) osmo_stream_srv_write(conn); - return 0; + return rc; } /*! \brief Create a Stream Server inside the specified link -- To view, visit https://gerrit.osmocom.org/11705 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmo-netif Gerrit-Branch: master Gerrit-MessageType: merged Gerrit-Change-Id: I0a9c7d8e3263c73440f7084dbb1792a4ca5038f0 Gerrit-Change-Number: 11705 Gerrit-PatchSet: 2 Gerrit-Owner: Stefan Sperling <ssperl...@sysmocom.de> Gerrit-Reviewer: Jenkins Builder (1000002) Gerrit-Reviewer: Pau Espin Pedrol <pes...@sysmocom.de> Gerrit-Reviewer: Stefan Sperling <ssperl...@sysmocom.de>