Question about multiple upstream->peer.free calls
mdounin at mdounin.ru
Wed Apr 11 09:41:15 UTC 2012
On Tue, Apr 10, 2012 at 07:50:43PM -0700, Mike Gagnon wrote:
> I am developing a load-balancing module for nginx. I have noticed that
> when a peer fails (say because the connection was reset by the peer)
> the r->upstream->peer.free function is called multiple times on the
> same peer connection: the first time with state == NGX_PEER_FAILED
> set, and the second time with state == 0.
> What is the purpose of calling peer.free multiple times?
There is no real reason, it's more or less bug. It's not yet
fixed as it doesn't cause any problems with vanilla balancer
modules (well, actually there is a workaround in upstream
keepalive, though it's mostly result of the fact it was developed
as a separate module). We'll likely fix this somewhere in
> Is there a
> recommended way to tell if a call to peer.free is the first call (for
> that peer connection)? Or to tell if it is the last call (for that
> peer connection)?
> This issue is important for the correctness of my code.
For now I would recommend doing similar thing as upstream
keepalive does: remember 1st free() call in an internal data and
ignore subsequent calls.
More information about the nginx-devel