[pypy-svn] pypy default: simplify by only mallocing once

gutworth commits-noreply at bitbucket.org
Mon Jan 24 23:33:13 CET 2011


Author: Benjamin Peterson <benjamin at python.org>
Branch: 
Changeset: r41273:260dd493fcd1
Date: 2011-01-24 16:34 -0600
http://bitbucket.org/pypy/pypy/changeset/260dd493fcd1/

Log:	simplify by only mallocing once

diff --git a/pypy/rpython/module/ll_os.py b/pypy/rpython/module/ll_os.py
--- a/pypy/rpython/module/ll_os.py
+++ b/pypy/rpython/module/ll_os.py
@@ -684,19 +684,17 @@
         c_getgroups = self.llexternal('getgroups', [rffi.INT, GP], rffi.INT)
 
         def getgroups_llimpl():
-            groups = lltype.malloc(GP.TO, 0, flavor='raw')
-            try:
-                n = c_getgroups(0, groups)
-                if n >= 0:
-                    lltype.free(groups, flavor='raw')
-                    groups = lltype.malloc(GP.TO, n, flavor='raw')
+            n = c_getgroups(0, lltype.nullptr(GP.TO))
+            if n >= 0:
+                groups = lltype.malloc(GP.TO, n, flavor='raw')
+                try:
                     n = c_getgroups(n, groups)
                     result = [groups[i] for i in range(n)]
-                    if n >= 0:
-                        return result
+                finally:
+                    lltype.free(groups, flavor='raw')
+                if n >= 0:
+                    return result
                 raise OSError(rposix.get_errno(), "os_getgroups failed")
-            finally:
-                lltype.free(groups, flavor='raw')
 
         return extdef([], [self.GID_T], llimpl=getgroups_llimpl,
                       export_name="ll_os.ll_getgroups")


More information about the Pypy-commit mailing list