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