Bug 680840 - Use infallible allocations in GrowAtomTable() - r=dveditz
☠☠ backed out by e986b99d847b ☠ ☠
authorBenoit Jacob <bjacob@mozilla.com>
Fri, 09 Sep 2011 18:00:21 -0400
changeset 76829 e5c2f6587160d302d18bbdeff2a9d2b093bf2837
parent 76828 db67bdba5ca815d885a7f0127d6c23acde6524ed
child 76830 e986b99d847b35cb2ed48f04542af64c3a538945
push id3
push userfelipc@gmail.com
push dateFri, 30 Sep 2011 20:09:13 +0000
reviewersdveditz
bugs680840
milestone9.0a1
Bug 680840 - Use infallible allocations in GrowAtomTable() - r=dveditz
gfx/angle/README.mozilla
gfx/angle/angle-use-xmalloc.patch
gfx/angle/src/compiler/preprocessor/atom.c
--- a/gfx/angle/README.mozilla
+++ b/gfx/angle/README.mozilla
@@ -4,16 +4,17 @@ Current revision: r740
 
 == Applied local patches ==
 
 In this order:
   angle-nspr-misc.patch - don't bother with ANGLE_OS detection with NSPR
   angle-renaming.patch - rename debug.h to compilerdebug.h to avoid conflict in our makefiles
   angle-intrinsic-msvc2005.patch - work around a MSVC 2005 compile error
   angle-limit-identifiers-to-250-chars.patch - see bug 675625
+  angle-use-xmalloc.patch - see bug 680840. Can drop this patch whenever the new preprocessor lands.
 
 In addition to these patches, the Makefile.in files are ours, they're not present in upsteam ANGLE.
 
 == How to update this ANGLE copy ==
 
 1. Unapply patches
 2. Apply diff with new ANGLE version
 3. Reapply patches.
new file mode 100644
--- /dev/null
+++ b/gfx/angle/angle-use-xmalloc.patch
@@ -0,0 +1,61 @@
+# HG changeset patch
+# Parent f9711acdf40de5fa6b18bc82f5549cf50fe9196e
+
+diff --git a/gfx/angle/src/compiler/preprocessor/atom.c b/gfx/angle/src/compiler/preprocessor/atom.c
+--- a/gfx/angle/src/compiler/preprocessor/atom.c
++++ b/gfx/angle/src/compiler/preprocessor/atom.c
+@@ -48,16 +48,18 @@ NVIDIA HAS BEEN ADVISED OF THE POSSIBILI
+ 
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
+ 
+ #include "compiler/compilerdebug.h"
+ #include "compiler/preprocessor/slglobals.h"
+ 
++#include "../../../../../memory/mozalloc/mozalloc.h"
++
+ #undef malloc
+ #undef realloc
+ #undef free
+ 
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////// String table: //////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ 
+@@ -318,31 +320,23 @@ static int AddAtomFixed(AtomTable *atabl
+  */
+ 
+ static int GrowAtomTable(AtomTable *atable, int size)
+ {
+     int *newmap, *newrev;
+ 
+     if (atable->size < size) {
+         if (atable->amap) {
+-            newmap = realloc(atable->amap, sizeof(int)*size);
+-            newrev = realloc(atable->arev, sizeof(int)*size);
++            newmap = moz_xrealloc(atable->amap, sizeof(int)*size);
++            newrev = moz_xrealloc(atable->arev, sizeof(int)*size);
+         } else {
+-            newmap = malloc(sizeof(int)*size);
+-            newrev = malloc(sizeof(int)*size);
++            newmap = moz_xmalloc(sizeof(int)*size);
++            newrev = moz_xmalloc(sizeof(int)*size);
+             atable->size = 0;
+         }
+-        if (!newmap || !newrev) {
+-            /* failed to grow -- error */
+-            if (newmap)
+-                atable->amap = newmap;
+-            if (newrev)
+-                atable->arev = newrev;
+-            return -1;
+-        }
+         memset(&newmap[atable->size], 0, (size - atable->size) * sizeof(int));
+         memset(&newrev[atable->size], 0, (size - atable->size) * sizeof(int));
+         atable->amap = newmap;
+         atable->arev = newrev;
+         atable->size = size;
+     }
+     return 0;
+ } // GrowAtomTable
--- a/gfx/angle/src/compiler/preprocessor/atom.c
+++ b/gfx/angle/src/compiler/preprocessor/atom.c
@@ -48,16 +48,18 @@ NVIDIA HAS BEEN ADVISED OF THE POSSIBILI
 
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 
 #include "compiler/compilerdebug.h"
 #include "compiler/preprocessor/slglobals.h"
 
+#include "../../../../../memory/mozalloc/mozalloc.h"
+
 #undef malloc
 #undef realloc
 #undef free
 
 ///////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////// String table: //////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -318,31 +320,23 @@ static int AddAtomFixed(AtomTable *atabl
  */
 
 static int GrowAtomTable(AtomTable *atable, int size)
 {
     int *newmap, *newrev;
 
     if (atable->size < size) {
         if (atable->amap) {
-            newmap = realloc(atable->amap, sizeof(int)*size);
-            newrev = realloc(atable->arev, sizeof(int)*size);
+            newmap = moz_xrealloc(atable->amap, sizeof(int)*size);
+            newrev = moz_xrealloc(atable->arev, sizeof(int)*size);
         } else {
-            newmap = malloc(sizeof(int)*size);
-            newrev = malloc(sizeof(int)*size);
+            newmap = moz_xmalloc(sizeof(int)*size);
+            newrev = moz_xmalloc(sizeof(int)*size);
             atable->size = 0;
         }
-        if (!newmap || !newrev) {
-            /* failed to grow -- error */
-            if (newmap)
-                atable->amap = newmap;
-            if (newrev)
-                atable->arev = newrev;
-            return -1;
-        }
         memset(&newmap[atable->size], 0, (size - atable->size) * sizeof(int));
         memset(&newrev[atable->size], 0, (size - atable->size) * sizeof(int));
         atable->amap = newmap;
         atable->arev = newrev;
         atable->size = size;
     }
     return 0;
 } // GrowAtomTable