Mercurial > cpython-lru_cache-weakref
diff Modules/socketmodule.c @ 1207:b564bd4e57e1 legacy-trunk
* ceval.c: ifdef out the last argument passing compat hack.
* Fixed memory leaks in socket, select and sv modules: mkvalue("O", v)
does INCREF(v) so if v is brand new it should be XDECREF'd
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Fri, 05 Feb 1993 09:46:15 +0000 |
| parents | 6461dac9a9f2 |
| children | c4cd0d9d8281 |
line wrap: on
line diff
--- a/Modules/socketmodule.c Fri Feb 05 09:39:16 1993 +0000 +++ b/Modules/socketmodule.c Fri Feb 05 09:46:15 1993 +0000 @@ -223,7 +223,10 @@ case AF_INET: { struct sockaddr_in *a = (struct sockaddr_in *) addr; - return mkvalue("Oi", makeipaddr(a), ntohs(a->sin_port)); + object *addr = makeipaddr(a); + object *ret = mkvalue("Oi", addr, ntohs(a->sin_port)); + XDECREF(addr); + return ret; } case AF_UNIX: @@ -342,7 +345,7 @@ { char addrbuf[256]; int addrlen, newfd; - object *res; + object *sock, *addr, *res; if (!getnoarg(args)) return NULL; if (!getsockaddrlen(s, &addrlen)) @@ -354,13 +357,16 @@ return socket_error(); /* Create the new object with unspecified family, to avoid calls to bind() etc. on it. */ - res = mkvalue("OO", (object *) newsockobject(newfd, - s->sock_family, - s->sock_type, - s->sock_proto), - makesockaddr((struct sockaddr *) addrbuf, addrlen)); - if (res == NULL) + sock = (object *) newsockobject(newfd, + s->sock_family, + s->sock_type, + s->sock_proto); + if (sock == NULL) close(newfd); + addr = makesockaddr((struct sockaddr *) addrbuf, addrlen); + res = mkvalue("OO", sock, addr); + XDECREF(sock); + XDECREF(addr); return res; } @@ -693,7 +699,7 @@ object *args; { char addrbuf[256]; - object *buf; + object *buf, *addr, *ret; int addrlen, len, n; if (!getintarg(args, &len)) return NULL; @@ -708,8 +714,11 @@ return socket_error(); if (resizestring(&buf, n) < 0) return NULL; - return mkvalue("OO", buf, - makesockaddr((struct sockaddr *)addrbuf, addrlen)); + addr = makesockaddr((struct sockaddr *)addrbuf, addrlen); + ret = mkvalue("OO", buf, addr); + XDECREF(addr); + XDECREF(buf); + return ret; }
