summaryrefslogtreecommitdiff
path: root/malloc.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2022-06-06 20:01:41 +0300
committerIvan Maidanski <ivmai@mail.ru>2022-06-07 14:08:30 +0300
commitaabfaeb28ccbc3016aa17d0934b0affb721286cf (patch)
treef596a1f6c0807c13df602e07cbbd9da321153f14 /malloc.c
parent0c44b469646fb07cf82a62deed6a7ee693112c8f (diff)
downloadbdwgc-aabfaeb28ccbc3016aa17d0934b0affb721286cf.tar.gz
Specify that internal allocations failure is unlikely
(refactoring) * finalize.c [!GC_NO_FINALIZATION] (GC_register_disappearing_link_inner): Assume failure of allocation (resulting in NULL or GC_oom_fn call) is unlikely. * malloc.c [DBG_HDRS_ALL || GC_GCJ_SUPPORT || !GC_NO_FINALIZATION] (GC_generic_malloc_inner_ignore_off_page): Likewise. * malloc.c (GC_generic_malloc): Likewise. * malloc.c [REDIRECT_MALLOC && !REDIRECT_MALLOC_IN_HEADER] (calloc, strdup, strndup): Likewise. * mallocx.c (GC_realloc, GC_memalign, GC_strdup, GC_strndup): Likewise. * mallocx.c [GC_REQUIRE_WCSDUP] (GC_wcsdup): Likewise. * specific.c [USE_CUSTOM_SPECIFIC] (GC_setspecific): Likewise. * typd_mlc.c (GC_make_sequence_descriptor, GC_make_descriptor): Likewise. * malloc.c [REDIRECT_MALLOC && !REDIRECT_MALLOC_IN_HEADER] (calloc): Expect that lb and n are not greater than GC_SQRT_SIZE_MAX. * typd_mlc.c (GC_calloc_explicitly_typed): Likewise. * typd_mlc.c (GC_add_ext_descriptor): Assume that resizing of GC_ext_descriptors[] is rare. * typd_mlc.c (GC_calloc_explicitly_typed): Do not call GC_make_array_descriptor() if n * lb > GC_SIZE_MAX. * malloc.c [REDIRECT_MALLOC && !REDIRECT_MALLOC_IN_HEADER && !strndup] (strndup): Expect that len is not greater than size. * mallocx.c (GC_strndup): Likewise. * typd_mlc.c (GC_make_sequence_descriptor): Reformat code.
Diffstat (limited to 'malloc.c')
-rw-r--r--malloc.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/malloc.c b/malloc.c
index 0c75b76b..7714e5dd 100644
--- a/malloc.c
+++ b/malloc.c
@@ -226,8 +226,9 @@ GC_INNER void * GC_generic_malloc_inner(size_t lb, int k)
GC_ASSERT(k < MAXOBJKINDS);
lb_adjusted = ADD_SLOP(lb);
op = GC_alloc_large_and_clear(lb_adjusted, k, IGNORE_OFF_PAGE);
- if (op != NULL)
+ if (EXPECT(op != NULL, TRUE)) {
GC_bytes_allocd += lb_adjusted;
+ }
return op;
}
#endif
@@ -288,7 +289,7 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_generic_malloc(size_t lb, int k)
BZERO(result, n_blocks * HBLKSIZE);
}
}
- if (NULL == result) return (*GC_get_oom_fn())(lb);
+ if (EXPECT(NULL == result, FALSE)) return (*GC_get_oom_fn())(lb);
return result;
}
@@ -486,7 +487,7 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_malloc_uncollectable(size_t lb)
void * calloc(size_t n, size_t lb)
{
- if ((lb | n) > GC_SQRT_SIZE_MAX /* fast initial test */
+ if (EXPECT((lb | n) > GC_SQRT_SIZE_MAX, FALSE) /* fast initial test */
&& lb && n > GC_SIZE_MAX / lb)
return (*GC_get_oom_fn())(GC_SIZE_MAX); /* n*lb overflow */
# if defined(GC_LINUX_THREADS)
@@ -519,7 +520,7 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_malloc_uncollectable(size_t lb)
size_t lb = strlen(s) + 1;
char *result = (char *)REDIRECT_MALLOC_F(lb);
- if (NULL == result) {
+ if (EXPECT(NULL == result, FALSE)) {
errno = ENOMEM;
return NULL;
}
@@ -537,10 +538,10 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_malloc_uncollectable(size_t lb)
{
char *copy;
size_t len = strlen(str);
- if (len > size)
+ if (EXPECT(len > size, FALSE))
len = size;
copy = (char *)REDIRECT_MALLOC_F(len + 1);
- if (copy == NULL) {
+ if (EXPECT(NULL == copy, FALSE)) {
errno = ENOMEM;
return NULL;
}