Question about multiple upstream->peer.free calls

Maxim Dounin mdounin at mdounin.ru
Wed Apr 11 09:41:15 UTC 2012


Hello!

On Tue, Apr 10, 2012 at 07:50:43PM -0700, Mike Gagnon wrote:

> Hello,
> 
> 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 
1.3.x.

> 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.

Maxim Dounin



More information about the nginx-devel mailing list