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: