vmclear.c revision da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968
03831d35f7499c87d51205817c93e9a8d42c4baestevel/***********************************************************************
03831d35f7499c87d51205817c93e9a8d42c4baestevel* *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* This software is part of the ast package *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* Copyright (c) 1985-2007 AT&T Knowledge Ventures *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* and is licensed under the *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* Common Public License, Version 1.0 *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* by AT&T Knowledge Ventures *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* A copy of the License is available at *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* http://www.opensource.org/licenses/cpl1.0.txt *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* Information and Software Systems Research *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* AT&T Research *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* Florham Park NJ *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* Glenn Fowler <gsf@research.att.com> *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* David Korn <dgk@research.att.com> *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* Phong Vo <kpv@research.att.com> *
03831d35f7499c87d51205817c93e9a8d42c4baestevel* *
03831d35f7499c87d51205817c93e9a8d42c4baestevel***********************************************************************/
03831d35f7499c87d51205817c93e9a8d42c4baestevel#if defined(_UWIN) && defined(_BLD_ast)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelvoid _STUB_vmclear(){}
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#else
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#include "vmhdr.h"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* Clear out all allocated space.
03831d35f7499c87d51205817c93e9a8d42c4baestevel**
03831d35f7499c87d51205817c93e9a8d42c4baestevel** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94.
03831d35f7499c87d51205817c93e9a8d42c4baestevel*/
03831d35f7499c87d51205817c93e9a8d42c4baestevel#if __STD_C
03831d35f7499c87d51205817c93e9a8d42c4baestevelint vmclear(Vmalloc_t* vm)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#else
03831d35f7499c87d51205817c93e9a8d42c4baestevelint vmclear(vm)
03831d35f7499c87d51205817c93e9a8d42c4baestevelVmalloc_t* vm;
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel{
03831d35f7499c87d51205817c93e9a8d42c4baestevel reg Seg_t* seg;
03831d35f7499c87d51205817c93e9a8d42c4baestevel reg Seg_t* next;
03831d35f7499c87d51205817c93e9a8d42c4baestevel reg Block_t* tp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel reg size_t size, s;
03831d35f7499c87d51205817c93e9a8d42c4baestevel reg Vmdata_t* vd = vm->data;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel if(!(vd->mode&VM_TRUST) )
03831d35f7499c87d51205817c93e9a8d42c4baestevel { if(ISLOCK(vd,0))
03831d35f7499c87d51205817c93e9a8d42c4baestevel return -1;
03831d35f7499c87d51205817c93e9a8d42c4baestevel SETLOCK(vd,0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel vd->free = vd->wild = NIL(Block_t*);
03831d35f7499c87d51205817c93e9a8d42c4baestevel vd->pool = 0;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel if(vd->mode&(VM_MTBEST|VM_MTDEBUG|VM_MTPROFILE) )
03831d35f7499c87d51205817c93e9a8d42c4baestevel { vd->root = NIL(Block_t*);
03831d35f7499c87d51205817c93e9a8d42c4baestevel for(s = 0; s < S_TINY; ++s)
03831d35f7499c87d51205817c93e9a8d42c4baestevel TINY(vd)[s] = NIL(Block_t*);
03831d35f7499c87d51205817c93e9a8d42c4baestevel for(s = 0; s <= S_CACHE; ++s)
03831d35f7499c87d51205817c93e9a8d42c4baestevel CACHE(vd)[s] = NIL(Block_t*);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel for(seg = vd->seg; seg; seg = next)
03831d35f7499c87d51205817c93e9a8d42c4baestevel { next = seg->next;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel tp = SEGBLOCK(seg);
03831d35f7499c87d51205817c93e9a8d42c4baestevel size = seg->baddr - ((Vmuchar_t*)tp) - 2*sizeof(Head_t);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel SEG(tp) = seg;
03831d35f7499c87d51205817c93e9a8d42c4baestevel SIZE(tp) = size;
03831d35f7499c87d51205817c93e9a8d42c4baestevel if((vd->mode&(VM_MTLAST|VM_MTPOOL)) )
03831d35f7499c87d51205817c93e9a8d42c4baestevel seg->free = tp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel else
03831d35f7499c87d51205817c93e9a8d42c4baestevel { SIZE(tp) |= BUSY|JUNK;
03831d35f7499c87d51205817c93e9a8d42c4baestevel LINK(tp) = CACHE(vd)[C_INDEX(SIZE(tp))];
03831d35f7499c87d51205817c93e9a8d42c4baestevel CACHE(vd)[C_INDEX(SIZE(tp))] = tp;
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel tp = BLOCK(seg->baddr);
03831d35f7499c87d51205817c93e9a8d42c4baestevel SEG(tp) = seg;
03831d35f7499c87d51205817c93e9a8d42c4baestevel SIZE(tp) = BUSY;
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel CLRLOCK(vd,0);
03831d35f7499c87d51205817c93e9a8d42c4baestevel return 0;
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel