1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2007 AT&T Knowledge Ventures * 5 * and is licensed under the * 6 * Common Public License, Version 1.0 * 7 * by AT&T Knowledge Ventures * 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 47 if(!(vd->mode&VM_TRUST) ) 48 { if(ISLOCK(vd,0)) 49 return -1; 50 SETLOCK(vd,0); 51 } 52 53 vd->free = vd->wild = NIL(Block_t*); 54 vd->pool = 0; 55 56 if(vd->mode&(VM_MTBEST|VM_MTDEBUG|VM_MTPROFILE) ) 57 { vd->root = NIL(Block_t*); 58 for(s = 0; s < S_TINY; ++s) 59 TINY(vd)[s] = NIL(Block_t*); 60 for(s = 0; s <= S_CACHE; ++s) 61 CACHE(vd)[s] = NIL(Block_t*); 62 } 63 64 for(seg = vd->seg; seg; seg = next) 65 { next = seg->next; 66 67 tp = SEGBLOCK(seg); 68 size = seg->baddr - ((Vmuchar_t*)tp) - 2*sizeof(Head_t); 69 70 SEG(tp) = seg; 71 SIZE(tp) = size; 72 if((vd->mode&(VM_MTLAST|VM_MTPOOL)) ) 73 seg->free = tp; 74 else 75 { SIZE(tp) |= BUSY|JUNK; 76 LINK(tp) = CACHE(vd)[C_INDEX(SIZE(tp))]; 77 CACHE(vd)[C_INDEX(SIZE(tp))] = tp; 78 } 79 80 tp = BLOCK(seg->baddr); 81 SEG(tp) = seg; 82 SIZE(tp) = BUSY; 83 } 84 85 CLRLOCK(vd,0); 86 return 0; 87 } 88 89 #endif 90