improved; delayed frees did not work anyway

This commit is contained in:
ceriel 1988-07-05 11:50:11 +00:00
parent a2905da259
commit bb3dc913a2

View file

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