shithub: riscv

Download patch

ref: 7562da90e562e65156042574e088d4359a8fccba
parent: 431cbe35f6a3f9c0c74d11937dfa7e06da34ecde
author: cinap_lenrek <[email protected]>
date: Sun Sep 6 16:43:05 EDT 2015

libc: remove privfree(), simplify privalloc()

--- a/sys/include/libc.h
+++ b/sys/include/libc.h
@@ -474,7 +474,6 @@
 extern	int	rwakeup(Rendez*);
 extern	int	rwakeupall(Rendez*);
 extern	void**	privalloc(void);
-extern	void	privfree(void**);
 
 /*
  *  network dialing
--- a/sys/man/2/privalloc
+++ b/sys/man/2/privalloc
@@ -1,6 +1,6 @@
 .TH PRIVALLOC 2
 .SH NAME
-privalloc, privfree \- per-process private storage management
+privalloc \- per-process private storage management
 .SH SYNOPSIS
 .B #include <u.h>
 .br
@@ -9,9 +9,6 @@
 .PP
 .B
 void**	privalloc(void)
-.PP
-.B
-void	privfree(void **p)
 .SH DESCRIPTION
 .I Privalloc
 returns a pointer to a per-process private storage location.
@@ -20,16 +17,6 @@
 It returns
 .B nil
 if there are no free slots available.
-.PP
-.I Privfree
-releases a location allocated with
-.IR privalloc .
-It is legal to call
-.I privfree
-with
-.I p
-set to
-.BR nil .
 .SH SOURCE
 .B /sys/src/libc/9sys/privalloc.c
 .SH SEE ALSO
--- a/sys/src/libc/9sys/privalloc.c
+++ b/sys/src/libc/9sys/privalloc.c
@@ -2,8 +2,6 @@
 #include <libc.h>
 
 static Lock	privlock;
-static int	privinit;
-static void	**privs;
 
 extern void	**_privates;
 extern int	_nprivates;
@@ -12,34 +10,13 @@
 privalloc(void)
 {
 	void **p;
-	int i;
 
 	lock(&privlock);
-	if(!privinit){
-		privinit = 1;
-		if(_nprivates){
-			_privates[0] = 0;
-			for(i = 1; i < _nprivates; i++)
-				_privates[i] = &_privates[i - 1];
-			privs = &_privates[i - 1];
-		}
-	}
-	p = privs;
-	if(p != nil){
-		privs = *p;
-		*p = nil;
-	}
+	if(_nprivates > 0)
+		p = &_privates[--_nprivates];
+	else
+		p = nil;
 	unlock(&privlock);
-	return p;
-}
 
-void
-privfree(void **p)
-{
-	lock(&privlock);
-	if(p != nil && privinit){
-		*p = privs;
-		privs = p;
-	}
-	unlock(&privlock);
+	return p;
 }