1 #include <u.h> 2 #include <libc.h> 3 4 static Lock privlock; 5 static int privinit; 6 static void **privs; 7 8 extern void **_privates; 9 extern int _nprivates; 10 11 void ** privalloc(void)12privalloc(void) 13 { 14 void **p; 15 int i; 16 17 lock(&privlock); 18 if(!privinit){ 19 privinit = 1; 20 if(_nprivates){ 21 _privates[0] = 0; 22 for(i = 1; i < _nprivates; i++) 23 _privates[i] = &_privates[i - 1]; 24 privs = &_privates[i - 1]; 25 } 26 } 27 p = privs; 28 if(p != nil){ 29 privs = *p; 30 *p = nil; 31 } 32 unlock(&privlock); 33 return p; 34 } 35 36 void privfree(void ** p)37privfree(void **p) 38 { 39 lock(&privlock); 40 if(p != nil && privinit){ 41 *p = privs; 42 privs = p; 43 } 44 unlock(&privlock); 45 } 46