improved; delayed frees did not work anyway
This commit is contained in:
parent
a2905da259
commit
bb3dc913a2
|
@ -26,10 +26,9 @@
|
|||
#define ILL_BREAK (char *)(-1) /* funny failure value */
|
||||
#endif
|
||||
extern char *SBRK();
|
||||
privatedata char *freed;
|
||||
#ifdef STORE
|
||||
#define MAX_STORE 32
|
||||
private do_free(), Xfree(), sell_out();
|
||||
private do_free(), sell_out();
|
||||
privatedata mallink *store[MAX_STORE];
|
||||
#endif STORE
|
||||
|
||||
|
@ -40,7 +39,6 @@ malloc(n)
|
|||
register mallink *ml;
|
||||
register int min_class;
|
||||
|
||||
if (freed) Xfree();
|
||||
if (n < MIN_SIZE) n = align(MIN_SIZE); else n = align(n);
|
||||
#ifdef STORE
|
||||
if (n <= MAX_STORE*MIN_SIZE) {
|
||||
|
@ -141,18 +139,11 @@ malloc(n)
|
|||
|
||||
free(addr)
|
||||
char *addr;
|
||||
{
|
||||
if (freed) Xfree();
|
||||
freed = addr;
|
||||
}
|
||||
|
||||
private
|
||||
Xfree()
|
||||
{check_mallinks("free entry");{
|
||||
register mallink *ml = mallink_of_block(freed);
|
||||
register mallink *ml = mallink_of_block(addr);
|
||||
|
||||
#ifdef STORE
|
||||
|
||||
freed = 0;
|
||||
if (free_of(ml) || in_store(ml))
|
||||
return; /* user frees free block */
|
||||
if (size_of(ml) <= MAX_STORE*MIN_SIZE) {
|
||||
|
@ -229,8 +220,6 @@ realloc(addr, n)
|
|||
register unsigned int size;
|
||||
|
||||
if (n < MIN_SIZE) n = align(MIN_SIZE); else n = align(n);
|
||||
if (freed && freed != addr) Xfree();
|
||||
else freed = 0;
|
||||
if (free_of(ml)) {
|
||||
unlink_free_chunk(ml);
|
||||
set_free(ml, 0); /* user reallocs free block */
|
||||
|
|
Loading…
Reference in a new issue