* 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
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index be2b062..99a9213 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -112,6 +112,7 @@
 {
     object *fd2obj[FD_SETSIZE];
     object *ifdlist, *ofdlist, *efdlist;
+    object *ret;
     fd_set ifdset, ofdset, efdset;
     double timeout;
     struct timeval tv, *tvp;
@@ -168,8 +169,11 @@
     ifdlist = set2list(&ifdset, imax, fd2obj);
     ofdlist = set2list(&ofdset, omax, fd2obj);
     efdlist = set2list(&efdset, emax, fd2obj);
-
-    return mkvalue("OOO", ifdlist, ofdlist, efdlist);
+    ret = mkvalue("OOO", ifdlist, ofdlist, efdlist);
+    XDECREF(ifdlist);
+    XDECREF(ofdlist);
+    XDECREF(efdlist);
+    return ret;
 }
 
 
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index c72c9fd..2a0e291 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -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;
 }
 
 
diff --git a/Modules/svmodule.c b/Modules/svmodule.c
index 0d14473..bbdbf33 100644
--- a/Modules/svmodule.c
+++ b/Modules/svmodule.c
@@ -126,7 +126,7 @@
 	captureobject *self;
 	object *args;
 {
-	object *f1, *f2;
+	object *f1, *f2, *ret;
 	int fieldsize;
 
 	if (self->ob_info.format != SV_RGB8_FRAMES) {
@@ -136,14 +136,11 @@
 
 	fieldsize = self->ob_info.width * self->ob_info.height / 2;
 	f1 = newsizedstringobject((char *) self->ob_capture, fieldsize);
-	if (f1 == NULL)
-		return NULL;
 	f2 = newsizedstringobject((char *) self->ob_capture + fieldsize, fieldsize);
-	if (f2 == NULL) {
-		DECREF(f1);
-		return NULL;
-	}
-	return mkvalue("(OO)", f1, f2);
+	ret = mkvalue("(OO)", f1, f2);
+	XDECREF(f1);
+	XDECREF(f2);
+	return ret;
 }
 	
 static object *
diff --git a/Python/ceval.c b/Python/ceval.c
index b28f17c..727bc0c 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -786,13 +786,6 @@
 			break;
 		
 		case UNPACK_ARG:
-			/* Implement various compatibility hacks:
-			   (a) f(a,b,...) should accept f((1,2,...))
-			   (b) f((a,b,...)) should accept f(1,2,...)
-			   (c) f(self,(a,b,...)) should accept f(x,1,2,...)
-			   Actually, (c) is dangerous, and (b) seems
-			   unnecessary, but (a) can't be missed...
-			*/
 			{
 				int n;
 				if (EMPTY()) {
@@ -809,6 +802,12 @@
 					break;
 				}
 				n = gettuplesize(v);
+#ifdef COMPAT_HACKS
+/* Implement various compatibility hacks (for 0.9.4 or earlier):
+   (a) f(a,b,...) accepts f((1,2,...))
+   (b) f((a,b,...)) accepts f(1,2,...)
+   (c) f(self,(a,b,...)) accepts f(x,1,2,...)
+*/
 				if (n == 1 && oparg != 1) {
 					/* Rule (a) */
 					w = gettupleitem(v, 0);
@@ -819,7 +818,6 @@
 						n = gettuplesize(v);
 					}
 				}
-#ifdef COMPAT_HACKS /* Compatibility hacks no longer needed (I think) */
 				else if (n != 1 && oparg == 1) {
 					/* Rule (b) */
 					PUSH(v);