(Cherry-pick commit
80f428f from 'release-7_6' branch.)
* malloc.c [REDIRECT_MALLOC] (calloc):
Call oom_fn(SIZE_MAX) (instead of returning NULL) if n*lb overflows.
* typd_mlc.c (GC_calloc_explicitly_typed): Likewise.
* typd_mlc.c (GC_calloc_explicitly_typed): If register_disappearing_link
failed due to lack of memory then call oom_fn(lb) instead of
GC_malloc(lb); update comment.
{
if ((lb | n) > GC_SQRT_SIZE_MAX /* fast initial test */
&& lb && n > GC_SIZE_MAX / lb)
- return NULL;
+ return (*GC_get_oom_fn())(GC_SIZE_MAX); /* n*lb overflow */
# if defined(GC_LINUX_THREADS) /* && !defined(USE_PROC_FOR_LIBRARIES) */
/* libpthread allocated some memory that is only pointed to by */
/* mmapped thread stacks. Make sure it is not collectible. */
&complex_descr, &leaf);
if ((lb | n) > GC_SQRT_SIZE_MAX /* fast initial check */
&& lb > 0 && n > GC_SIZE_MAX / lb)
- return NULL; /* n*lb overflow */
+ return (*GC_get_oom_fn())(GC_SIZE_MAX); /* n*lb overflow */
lb *= n;
switch(descr_type) {
case NO_MEM: return(0);
# endif
{
/* Couldn't register it due to lack of memory. Punt. */
- /* This will probably fail too, but gives the recovery code */
- /* a chance. */
- return GC_malloc(lb);
+ return (*GC_get_oom_fn())(lb);
}
}
return((void *) op);