MEDIUM: stream_interface: call si_data_close() before releasing the si
This will ensure that the data layer releases anything previously allocated.
diff --git a/src/session.c b/src/session.c
index 6db9f31..7bc2248 100644
--- a/src/session.c
+++ b/src/session.c
@@ -545,6 +545,7 @@
si->flags &= ~SI_FL_CAP_SPLICE;
fd_delete(si_fd(si));
+ si_data_close(si);
if (si->release)
si->release(si);
diff --git a/src/sock_raw.c b/src/sock_raw.c
index 213d469..5194ea4 100644
--- a/src/sock_raw.c
+++ b/src/sock_raw.c
@@ -811,6 +811,7 @@
case SI_ST_TAR:
si->state = SI_ST_DIS;
+ si_data_close(si);
if (si->release)
si->release(si);
default:
@@ -845,6 +846,7 @@
si->state = SI_ST_DIS;
si->exp = TICK_ETERNITY;
+ si_data_close(si);
if (si->release)
si->release(si);
return;
diff --git a/src/stream_interface.c b/src/stream_interface.c
index c2f7b94..ceed602 100644
--- a/src/stream_interface.c
+++ b/src/stream_interface.c
@@ -227,6 +227,7 @@
si->state = SI_ST_DIS;
si->exp = TICK_ETERNITY;
+ si_data_close(si);
if (si->release)
si->release(si);
}
@@ -263,6 +264,7 @@
si->state = SI_ST_DIS;
/* fall through */
+ si_data_close(si);
if (si->release)
si->release(si);
default: