Read/Write mutex for Extensions map
This commit is contained in:
@@ -99,8 +99,9 @@ func (c *Context) Morph(xmlBytes []byte) {
|
||||
"on the server.\")", xname)
|
||||
c.Putln("}")
|
||||
c.Putln("")
|
||||
c.Putln("xgb.ExtLock.Lock()")
|
||||
c.Putln("c.ExtLock.Lock()")
|
||||
c.Putln("c.Extensions[\"%s\"] = reply.MajorOpcode", xname)
|
||||
c.Putln("c.ExtLock.Unlock()")
|
||||
c.Putln("for evNum, fun := range xgb.NewExtEventFuncs[\"%s\"] {",
|
||||
xname)
|
||||
c.Putln("xgb.NewEventFuncs[int(reply.FirstEvent) + evNum] = fun")
|
||||
@@ -109,8 +110,6 @@ func (c *Context) Morph(xmlBytes []byte) {
|
||||
xname)
|
||||
c.Putln("xgb.NewErrorFuncs[int(reply.FirstError) + errNum] = fun")
|
||||
c.Putln("}")
|
||||
c.Putln("xgb.ExtLock.Unlock()")
|
||||
c.Putln("")
|
||||
c.Putln("return nil")
|
||||
c.Putln("}")
|
||||
c.Putln("")
|
||||
|
||||
@@ -79,6 +79,8 @@ func (r *Request) CheckExt(c *Context) {
|
||||
if !c.protocol.isExt() {
|
||||
return
|
||||
}
|
||||
c.Putln("c.ExtLock.RLock()")
|
||||
c.Putln("defer c.ExtLock.RUnlock()")
|
||||
c.Putln("if _, ok := c.Extensions[\"%s\"]; !ok {", c.protocol.ExtXName)
|
||||
c.Putln("panic(\"Cannot issue request '%s' using the uninitialized "+
|
||||
"extension '%s'. %s.Init(connObj) must be called first.\")",
|
||||
@@ -169,7 +171,9 @@ func (r *Request) WriteRequest(c *Context) {
|
||||
c.Putln("buf := make([]byte, size)")
|
||||
c.Putln("")
|
||||
if c.protocol.isExt() {
|
||||
c.Putln("c.ExtLock.RLock()")
|
||||
c.Putln("buf[b] = c.Extensions[\"%s\"]", c.protocol.ExtXName)
|
||||
c.Putln("c.ExtLock.RUnlock()")
|
||||
c.Putln("b += 1")
|
||||
c.Putln("")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user