1 /***********************************************************************
2 * *
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 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
_STUB_vmclear()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
vmclear(Vmalloc_t * vm)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