]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR go/61620 (FAIL: go.test/test/fixedbugs/bug242.go execution, -O2 -g)
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 2 Jul 2014 14:23:45 +0000 (14:23 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 2 Jul 2014 14:23:45 +0000 (14:23 +0000)
PR go/61620

runtime: Don't free tiny blocks in map deletion.

The memory allocator now has a special case for tiny blocks
(smaller than 16 bytes) and they can not be explicitly freed.

From-SVN: r212233

libgo/runtime/go-map-delete.c

index f8f8907c345b020931bd0a7efe8bf5ba12950929..de8b0469deaf394e0e1648ce91d73e710d0e9379 100644 (file)
@@ -8,6 +8,7 @@
 #include <stdlib.h>
 
 #include "runtime.h"
+#include "malloc.h"
 #include "go-alloc.h"
 #include "go-assert.h"
 #include "map.h"
@@ -47,7 +48,8 @@ __go_map_delete (struct __go_map *map, const void *key)
       if (equalfn (key, entry + key_offset, key_size))
        {
          *pentry = *(void **) entry;
-         __go_free (entry);
+         if (descriptor->__entry_size >= TinySize)
+           __go_free (entry);
          map->__element_count -= 1;
          break;
        }