]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: Add release callback to si_applet
authorAman Gupta <aman@tmm1.net>
Tue, 3 Apr 2012 01:57:53 +0000 (18:57 -0700)
committerWilly Tarreau <w@1wt.eu>
Thu, 5 Apr 2012 08:39:20 +0000 (10:39 +0200)
include/types/stream_interface.h
src/dumpstats.c
src/peers.c
src/stream_interface.c

index 711394ada389dac33cc5e2eebc4620dd7a59a61f..8f35d643d862d13df43c123e99fe5b0cb31c78bd 100644 (file)
@@ -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 */
index dc3ac752be84c9660006983a9001c6705b8e7c8f..2421f896a4519851a474ad0732d38f497a5e7d56 100644 (file)
@@ -3961,11 +3961,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 = {{ },{
index c6810e70406e1544fd8d84625a64f18c1aaa4889..fe4ff9b96c0ef4f59116548aa2caf6cbded70b24 100644 (file)
@@ -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;
index 350a47b581bd7e3bd88b25846784707202e4f51b..b8a6d580efd00deee6eab0d2244693ef1a411c18 100644 (file)
@@ -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;
 }