[BUG] stream_interface: only call si->release when both dirs are closed

si->release() was called each time we closed one direction of a stream
interface, while it should only have been called when both sides are
closed. This bug is specific to 1.5 and only affects embedded tasks.
diff --git a/src/stream_interface.c b/src/stream_interface.c
index f7f0881..2ffca17 100644
--- a/src/stream_interface.c
+++ b/src/stream_interface.c
@@ -192,10 +192,10 @@
 	if (si->ob->flags & BF_SHUTW) {
 		si->state = SI_ST_DIS;
 		si->exp = TICK_ETERNITY;
-	}
 
-	if (si->release)
-		si->release(si);
+		if (si->release)
+			si->release(si);
+	}
 
 	/* note that if the task exist, it must unregister itself once it runs */
 	if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
@@ -226,6 +226,9 @@
 	case SI_ST_CER:
 		si->state = SI_ST_DIS;
 		/* fall through */
+
+		if (si->release)
+			si->release(si);
 	default:
 		si->flags &= ~SI_FL_WAIT_ROOM;
 		si->ib->flags |= BF_SHUTR;
@@ -233,9 +236,6 @@
 		si->exp = TICK_ETERNITY;
 	}
 
-	if (si->release)
-		si->release(si);
-
 	/* note that if the task exist, it must unregister itself once it runs */
 	if (!(si->flags & SI_FL_DONT_WAKE) && si->owner)
 		task_wakeup(si->owner, TASK_WOKEN_IO);