(__builtin_new): If __new_handler returns, keep trying to allocate the memory.

(__default_new_handler): Add __ to beginning of name to avoid namespace
clashing.

From-SVN: r6506
This commit is contained in:
Richard Kenner 1994-02-08 19:19:53 -05:00
parent a6e9783c22
commit 442e881d89
1 changed files with 11 additions and 7 deletions

View File

@ -1,6 +1,6 @@
/* More subroutines needed by GCC output code on some machines. */
/* Compile this one with gcc. */
/* Copyright (C) 1989, 1992, 1993 Free Software Foundation, Inc.
/* Copyright (C) 1989, 1992, 1993, 1994 Free Software Foundation, Inc.
This file is part of GNU CC.
@ -1574,8 +1574,12 @@ __builtin_new (size_t sz)
if (sz == 0)
sz = 1;
p = (void *) malloc (sz);
if (p == 0)
(*__new_handler) ();
while (p == 0)
{
(*__new_handler) ();
p = (void *) malloc (sz);
}
return p;
}
#endif /* L_op_new */
@ -1597,9 +1601,9 @@ __builtin_new (size_t sz)
typedef void (*vfp)(void);
extern void *__builtin_new (size_t);
static void default_new_handler (void);
static void __default_new_handler (void);
vfp __new_handler = default_new_handler;
vfp __new_handler = __default_new_handler;
vfp
__set_new_handler (handler)
@ -1608,7 +1612,7 @@ __set_new_handler (handler)
vfp prev_handler;
prev_handler = __new_handler;
if (handler == 0) handler = default_new_handler;
if (handler == 0) handler = __default_new_handler;
__new_handler = handler;
return prev_handler;
}
@ -1623,7 +1627,7 @@ set_new_handler (handler)
#define MESSAGE "Virtual memory exceeded in `new'\n"
static void
default_new_handler ()
__default_new_handler ()
{
/* don't use fprintf (stderr, ...) because it may need to call malloc. */
/* This should really print the name of the program, but that is hard to