Commit 73120ee8 authored by Rob Pike's avatar Rob Pike

use sync.Mutex instead of a channel for locking

R=rsc
DELTA=12  (3 added, 1 deleted, 8 changed)
OCL=20631
CL=20634
parent cc352e5c
......@@ -97,7 +97,7 @@ io.dirinstall: os.dirinstall syscall.dirinstall
net.dirinstall: once.install os.dirinstall strconv.dirinstall
os.dirinstall: syscall.dirinstall
regexp.dirinstall: os.dirinstall
reflect.dirinstall: strconv.dirinstall
reflect.dirinstall: strconv.dirinstall sync.dirinstall
strconv.dirinstall: os.dirinstall utf8.install
tabwriter.dirinstall: os.dirinstall io.dirinstall container/array.dirinstall
time.dirinstall: once.install os.dirinstall
......
......@@ -7,6 +7,8 @@
package reflect
import "sync"
export type Type interface
export func ExpandType(name string) Type
......@@ -390,21 +392,20 @@ var MissingStub *StubType;
var DotDotDotStub *StubType;
// The database stored in the maps is global; use locking to guarantee safety.
var lockchan *chan bool // Channel with buffer of 1, used as a mutex
var typestringlock sync.Mutex
func Lock() {
lockchan <- true // block if buffer is full
typestringlock.Lock()
}
func Unlock() {
<-lockchan // release waiters
typestringlock.Unlock()
}
func init() {
ptrsize = 8; // TODO: compute this
interfacesize = 2*ptrsize; // TODO: compute this
lockchan = new(chan bool, 1); // unlocked at creation - buffer is empty
Lock(); // not necessary because of init ordering but be safe.
types = new(map[string] *Type);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment