1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2008 AT&T Intellectual Property * 5 * and is licensed under the * 6 * Common Public License, Version 1.0 * 7 * by AT&T Intellectual Property * 8 * * 9 * A copy of the License is available at * 10 * http://www.opensource.org/licenses/cpl1.0.txt * 11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12 * * 13 * Information and Software Systems Research * 14 * AT&T Research * 15 * Florham Park NJ * 16 * * 17 * Glenn Fowler <gsf@research.att.com> * 18 * David Korn <dgk@research.att.com> * 19 * Phong Vo <kpv@research.att.com> * 20 * * 21 ***********************************************************************/ 22 #if defined(_UWIN) && defined(_BLD_ast) 23 24 void _STUB_vmclear(){} 25 26 #else 27 28 #include "vmhdr.h" 29 30 /* Clear out all allocated space. 31 ** 32 ** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. 33 */ 34 #if __STD_C 35 int vmclear(Vmalloc_t* vm) 36 #else 37 int vmclear(vm) 38 Vmalloc_t* vm; 39 #endif 40 { 41 reg Seg_t* seg; 42 reg Seg_t* next; 43 reg Block_t* tp; 44 reg size_t size, s; 45 reg Vmdata_t* vd = vm->data; 46 reg int inuse; 47 48 SETINUSE(vd, inuse); 49 if(!(vd->mode&VM_TRUST) ) 50 { if(ISLOCK(vd,0)) 51 { CLRINUSE(vd, inuse); 52 return -1; 53 } 54 SETLOCK(vd,0); 55 } 56 57 vd->free = vd->wild = NIL(Block_t*); 58 vd->pool = 0; 59 60 if(vd->mode&(VM_MTBEST|VM_MTDEBUG|VM_MTPROFILE) ) 61 { vd->root = NIL(Block_t*); 62 for(s = 0; s < S_TINY; ++s) 63 TINY(vd)[s] = NIL(Block_t*); 64 for(s = 0; s <= S_CACHE; ++s) 65 CACHE(vd)[s] = NIL(Block_t*); 66 } 67 68 for(seg = vd->seg; seg; seg = next) 69 { next = seg->next; 70 71 tp = SEGBLOCK(seg); 72 size = seg->baddr - ((Vmuchar_t*)tp) - 2*sizeof(Head_t); 73 74 SEG(tp) = seg; 75 SIZE(tp) = size; 76 if((vd->mode&(VM_MTLAST|VM_MTPOOL)) ) 77 seg->free = tp; 78 else 79 { SIZE(tp) |= BUSY|JUNK; 80 LINK(tp) = CACHE(vd)[C_INDEX(SIZE(tp))]; 81 CACHE(vd)[C_INDEX(SIZE(tp))] = tp; 82 } 83 84 tp = BLOCK(seg->baddr); 85 SEG(tp) = seg; 86 SIZE(tp) = BUSY; 87 } 88 89 CLRLOCK(vd,0); 90 CLRINUSE(vd, inuse); 91 return 0; 92 } 93 94 #endif 95