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 */
|
#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 */
|
||||||
|
|
Loading…
Reference in a new issue