---
 include/types/stream_interface.h |    1 +
 src/dumpstats.c                  |    2 ++
 src/peers.c                      |    3 +--
 src/stream_interface.c           |    2 +-
 4 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/include/types/stream_interface.h b/include/types/stream_interface.h
index 5acbd57..d59e3fb 100644
--- a/include/types/stream_interface.h
+++ b/include/types/stream_interface.h
@@ -189,6 +189,7 @@ struct stream_interface {
 struct si_applet {
        char *name; /* applet's name to report in logs */
        void (*fct)(struct stream_interface *);  /* internal I/O handler, may 
never be NULL */
+       void (*release)(struct stream_interface *);  /* callback to release 
resources, may be NULL */
 };
 
 #endif /* _TYPES_STREAM_INTERFACE_H */
diff --git a/src/dumpstats.c b/src/dumpstats.c
index 142429b..44117d9 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -3933,11 +3933,13 @@ static int stats_dump_errors_to_buffer(struct 
stream_interface *si)
 struct si_applet http_stats_applet = {
        .name = "<STATS>", /* used for logging */
        .fct = http_stats_io_handler,
+       .release = NULL,
 };
 
 static struct si_applet cli_applet = {
        .name = "<CLI>", /* used for logging */
        .fct = cli_io_handler,
+       .release = NULL,
 };
 
 static struct cfg_kw_list cfg_kws = {{ },{
diff --git a/src/peers.c b/src/peers.c
index c6810e7..fe4ff9b 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -1044,6 +1044,7 @@ quit:
 static struct si_applet peer_applet = {
        .name = "<PEER>", /* used for logging */
        .fct = peer_io_handler,
+       .release = peer_session_release,
 };
 
 /*
@@ -1079,7 +1080,6 @@ int peer_accept(struct session *s)
         /* we have a dedicated I/O handler for the stats */
        stream_int_register_handler(&s->si[1], &peer_applet);
        copy_target(&s->target, &s->si[1].target); // for logging only
-       s->si[1].release = peer_session_release;
        s->si[1].applet.private = s;
        s->si[1].applet.st0 = PEER_SESSION_ACCEPT;
 
@@ -1165,7 +1165,6 @@ static struct session *peer_session_create(struct peer 
*peer, struct peer_sessio
        s->si[0].applet.st0 = PEER_SESSION_CONNECT;
 
        stream_int_register_handler(&s->si[0], &peer_applet);
-       s->si[0].release = peer_session_release;
 
        s->si[1].fd = -1; /* just to help with debugging */
        s->si[1].owner = t;
diff --git a/src/stream_interface.c b/src/stream_interface.c
index 350a47b..b8a6d58 100644
--- a/src/stream_interface.c
+++ b/src/stream_interface.c
@@ -316,7 +316,7 @@ struct task *stream_int_register_handler(struct 
stream_interface *si, struct si_
        si->connect = NULL;
        set_target_applet(&si->target, app);
        si->applet.state = 0;
-       si->release   = NULL;
+       si->release   = app->release;
        si->flags |= SI_FL_WAIT_DATA;
        return si->owner;
 }
-- 
1.7.5.3


Reply via email to