From 41b09f4bbc748630fd6f9f1899bdcf3d16e51102 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 4 Aug 2015 20:44:05 +0200 Subject: [PATCH] MINOR: stream-int: add new function si_detach_endpoint() This function only detaches the endpoint from the stream-int and optionally returns the original pointer. This will be needed to steal idle connections from other connections. --- include/proto/stream_interface.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h index 449d5e6bc..6e4cfe878 100644 --- a/include/proto/stream_interface.h +++ b/include/proto/stream_interface.h @@ -129,6 +129,19 @@ static inline void si_set_state(struct stream_interface *si, int state) si->state = si->prev_state = state; } +/* only detaches the endpoint from the SI, which means that it's set to + * NULL and that ->ops is mapped to si_embedded_ops. The previous endpoint + * is returned. + */ +static inline enum obj_type *si_detach_endpoint(struct stream_interface *si) +{ + enum obj_type *prev = si->end; + + si->end = NULL; + si->ops = &si_embedded_ops; + return prev; +} + /* Release the endpoint if it's a connection or an applet, then nullify it. * Note: released connections are closed then freed. */ @@ -149,8 +162,7 @@ static inline void si_release_endpoint(struct stream_interface *si) appctx->applet->release(appctx); appctx_free(appctx); /* we share the connection pool */ } - si->end = NULL; - si->ops = &si_embedded_ops; + si_detach_endpoint(si); } /* Turn a possibly existing connection endpoint of stream interface to