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 ...@@ -97,7 +97,7 @@ io.dirinstall: os.dirinstall syscall.dirinstall
net.dirinstall: once.install os.dirinstall strconv.dirinstall net.dirinstall: once.install os.dirinstall strconv.dirinstall
os.dirinstall: syscall.dirinstall os.dirinstall: syscall.dirinstall
regexp.dirinstall: os.dirinstall regexp.dirinstall: os.dirinstall
reflect.dirinstall: strconv.dirinstall reflect.dirinstall: strconv.dirinstall sync.dirinstall
strconv.dirinstall: os.dirinstall utf8.install strconv.dirinstall: os.dirinstall utf8.install
tabwriter.dirinstall: os.dirinstall io.dirinstall container/array.dirinstall tabwriter.dirinstall: os.dirinstall io.dirinstall container/array.dirinstall
time.dirinstall: once.install os.dirinstall time.dirinstall: once.install os.dirinstall
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
package reflect package reflect
import "sync"
export type Type interface export type Type interface
export func ExpandType(name string) Type export func ExpandType(name string) Type
...@@ -390,21 +392,20 @@ var MissingStub *StubType; ...@@ -390,21 +392,20 @@ var MissingStub *StubType;
var DotDotDotStub *StubType; var DotDotDotStub *StubType;
// The database stored in the maps is global; use locking to guarantee safety. // 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() { func Lock() {
lockchan <- true // block if buffer is full typestringlock.Lock()
} }
func Unlock() { func Unlock() {
<-lockchan // release waiters typestringlock.Unlock()
} }
func init() { func init() {
ptrsize = 8; // TODO: compute this ptrsize = 8; // TODO: compute this
interfacesize = 2*ptrsize; // 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. Lock(); // not necessary because of init ordering but be safe.
types = new(map[string] *Type); 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