From: simon Date: Wed, 28 Nov 2007 20:45:50 +0000 (+0000) Subject: Duplicate r7795 in uxnet.c. X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/commitdiff_plain/fef4049e0eb8eb8ca57aaacb7926ecd35aa31401 Duplicate r7795 in uxnet.c. git-svn-id: svn://svn.tartarus.org/sgt/putty@7796 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/unix/uxnet.c b/unix/uxnet.c index e1dfce32..bfc4a8ed 100644 --- a/unix/uxnet.c +++ b/unix/uxnet.c @@ -97,6 +97,10 @@ static int cmpfortree(void *av, void *bv) return -1; if (as > bs) return +1; + if (a < b) + return -1; + if (a > b) + return +1; return 0; } @@ -453,6 +457,14 @@ static int try_connect(Actual_Socket sock) short localport; int fl, salen; + /* + * Remove the socket from the tree before we overwrite its + * internal socket id, because that forms part of the tree's + * sorting criterion. We'll add it back before exiting this + * function, whether we changed anything or not. + */ + del234(sktree, sock); + if (sock->s >= 0) close(sock->s); @@ -605,9 +617,14 @@ static int try_connect(Actual_Socket sock) } uxsel_tell(sock); - add234(sktree, sock); ret: + + /* + * No matter what happened, put the socket back in the tree. + */ + add234(sktree, sock); + if (err) plug_log(sock->plug, 1, sock->addr, sock->port, strerror(err), err); return err;