diff options
| author | aarzilli <alessandro.arzilli@gmail.com> | 2016-03-01 15:41:38 +0100 | 
|---|---|---|
| committer | Přemysl Janouch <p@janouch.name> | 2018-09-08 16:49:24 +0200 | 
| commit | becaf43dcb3e9832c3eb951ff9908ed697868152 (patch) | |
| tree | f2a45ac253c5ec8265efa78f1d4a2c993153fe18 /nexgb/composite | |
| parent | baff8c19067489ea26bbb804ef693e966202b511 (diff) | |
| download | haven-becaf43dcb3e9832c3eb951ff9908ed697868152.tar.gz haven-becaf43dcb3e9832c3eb951ff9908ed697868152.tar.xz haven-becaf43dcb3e9832c3eb951ff9908ed697868152.zip | |
Read/Write mutex for Extensions map
Diffstat (limited to 'nexgb/composite')
| -rw-r--r-- | nexgb/composite/composite.go | 59 | 
1 files changed, 56 insertions, 3 deletions
| diff --git a/nexgb/composite/composite.go b/nexgb/composite/composite.go index b7ce2ad..1373f8b 100644 --- a/nexgb/composite/composite.go +++ b/nexgb/composite/composite.go @@ -20,16 +20,15 @@ func Init(c *xgb.Conn) error {  		return xgb.Errorf("No extension named Composite could be found on on the server.")  	} -	xgb.ExtLock.Lock() +	c.ExtLock.Lock()  	c.Extensions["Composite"] = reply.MajorOpcode +	c.ExtLock.Unlock()  	for evNum, fun := range xgb.NewExtEventFuncs["Composite"] {  		xgb.NewEventFuncs[int(reply.FirstEvent)+evNum] = fun  	}  	for errNum, fun := range xgb.NewExtErrorFuncs["Composite"] {  		xgb.NewErrorFuncs[int(reply.FirstError)+errNum] = fun  	} -	xgb.ExtLock.Unlock() -  	return nil  } @@ -75,6 +74,8 @@ type CreateRegionFromBorderClipCookie struct {  // CreateRegionFromBorderClip sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.  func CreateRegionFromBorderClip(c *xgb.Conn, Region xfixes.Region, Window xproto.Window) CreateRegionFromBorderClipCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'CreateRegionFromBorderClip' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -86,6 +87,8 @@ func CreateRegionFromBorderClip(c *xgb.Conn, Region xfixes.Region, Window xproto  // CreateRegionFromBorderClipChecked sends a checked request.  // If an error occurs, it can be retrieved using CreateRegionFromBorderClipCookie.Check()  func CreateRegionFromBorderClipChecked(c *xgb.Conn, Region xfixes.Region, Window xproto.Window) CreateRegionFromBorderClipCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'CreateRegionFromBorderClip' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -107,7 +110,9 @@ func createRegionFromBorderClipRequest(c *xgb.Conn, Region xfixes.Region, Window  	b := 0  	buf := make([]byte, size) +	c.ExtLock.RLock()  	buf[b] = c.Extensions["Composite"] +	c.ExtLock.RUnlock()  	b += 1  	buf[b] = 5 // request opcode @@ -133,6 +138,8 @@ type GetOverlayWindowCookie struct {  // GetOverlayWindow sends a checked request.  // If an error occurs, it will be returned with the reply by calling GetOverlayWindowCookie.Reply()  func GetOverlayWindow(c *xgb.Conn, Window xproto.Window) GetOverlayWindowCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'GetOverlayWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -144,6 +151,8 @@ func GetOverlayWindow(c *xgb.Conn, Window xproto.Window) GetOverlayWindowCookie  // GetOverlayWindowUnchecked sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.  func GetOverlayWindowUnchecked(c *xgb.Conn, Window xproto.Window) GetOverlayWindowCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'GetOverlayWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -201,7 +210,9 @@ func getOverlayWindowRequest(c *xgb.Conn, Window xproto.Window) []byte {  	b := 0  	buf := make([]byte, size) +	c.ExtLock.RLock()  	buf[b] = c.Extensions["Composite"] +	c.ExtLock.RUnlock()  	b += 1  	buf[b] = 7 // request opcode @@ -224,6 +235,8 @@ type NameWindowPixmapCookie struct {  // NameWindowPixmap sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.  func NameWindowPixmap(c *xgb.Conn, Window xproto.Window, Pixmap xproto.Pixmap) NameWindowPixmapCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'NameWindowPixmap' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -235,6 +248,8 @@ func NameWindowPixmap(c *xgb.Conn, Window xproto.Window, Pixmap xproto.Pixmap) N  // NameWindowPixmapChecked sends a checked request.  // If an error occurs, it can be retrieved using NameWindowPixmapCookie.Check()  func NameWindowPixmapChecked(c *xgb.Conn, Window xproto.Window, Pixmap xproto.Pixmap) NameWindowPixmapCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'NameWindowPixmap' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -256,7 +271,9 @@ func nameWindowPixmapRequest(c *xgb.Conn, Window xproto.Window, Pixmap xproto.Pi  	b := 0  	buf := make([]byte, size) +	c.ExtLock.RLock()  	buf[b] = c.Extensions["Composite"] +	c.ExtLock.RUnlock()  	b += 1  	buf[b] = 6 // request opcode @@ -282,6 +299,8 @@ type QueryVersionCookie struct {  // QueryVersion sends a checked request.  // If an error occurs, it will be returned with the reply by calling QueryVersionCookie.Reply()  func QueryVersion(c *xgb.Conn, ClientMajorVersion uint32, ClientMinorVersion uint32) QueryVersionCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -293,6 +312,8 @@ func QueryVersion(c *xgb.Conn, ClientMajorVersion uint32, ClientMinorVersion uin  // QueryVersionUnchecked sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.  func QueryVersionUnchecked(c *xgb.Conn, ClientMajorVersion uint32, ClientMinorVersion uint32) QueryVersionCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -354,7 +375,9 @@ func queryVersionRequest(c *xgb.Conn, ClientMajorVersion uint32, ClientMinorVers  	b := 0  	buf := make([]byte, size) +	c.ExtLock.RLock()  	buf[b] = c.Extensions["Composite"] +	c.ExtLock.RUnlock()  	b += 1  	buf[b] = 0 // request opcode @@ -380,6 +403,8 @@ type RedirectSubwindowsCookie struct {  // RedirectSubwindows sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.  func RedirectSubwindows(c *xgb.Conn, Window xproto.Window, Update byte) RedirectSubwindowsCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'RedirectSubwindows' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -391,6 +416,8 @@ func RedirectSubwindows(c *xgb.Conn, Window xproto.Window, Update byte) Redirect  // RedirectSubwindowsChecked sends a checked request.  // If an error occurs, it can be retrieved using RedirectSubwindowsCookie.Check()  func RedirectSubwindowsChecked(c *xgb.Conn, Window xproto.Window, Update byte) RedirectSubwindowsCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'RedirectSubwindows' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -412,7 +439,9 @@ func redirectSubwindowsRequest(c *xgb.Conn, Window xproto.Window, Update byte) [  	b := 0  	buf := make([]byte, size) +	c.ExtLock.RLock()  	buf[b] = c.Extensions["Composite"] +	c.ExtLock.RUnlock()  	b += 1  	buf[b] = 2 // request opcode @@ -440,6 +469,8 @@ type RedirectWindowCookie struct {  // RedirectWindow sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.  func RedirectWindow(c *xgb.Conn, Window xproto.Window, Update byte) RedirectWindowCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'RedirectWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -451,6 +482,8 @@ func RedirectWindow(c *xgb.Conn, Window xproto.Window, Update byte) RedirectWind  // RedirectWindowChecked sends a checked request.  // If an error occurs, it can be retrieved using RedirectWindowCookie.Check()  func RedirectWindowChecked(c *xgb.Conn, Window xproto.Window, Update byte) RedirectWindowCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'RedirectWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -472,7 +505,9 @@ func redirectWindowRequest(c *xgb.Conn, Window xproto.Window, Update byte) []byt  	b := 0  	buf := make([]byte, size) +	c.ExtLock.RLock()  	buf[b] = c.Extensions["Composite"] +	c.ExtLock.RUnlock()  	b += 1  	buf[b] = 1 // request opcode @@ -500,6 +535,8 @@ type ReleaseOverlayWindowCookie struct {  // ReleaseOverlayWindow sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.  func ReleaseOverlayWindow(c *xgb.Conn, Window xproto.Window) ReleaseOverlayWindowCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'ReleaseOverlayWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -511,6 +548,8 @@ func ReleaseOverlayWindow(c *xgb.Conn, Window xproto.Window) ReleaseOverlayWindo  // ReleaseOverlayWindowChecked sends a checked request.  // If an error occurs, it can be retrieved using ReleaseOverlayWindowCookie.Check()  func ReleaseOverlayWindowChecked(c *xgb.Conn, Window xproto.Window) ReleaseOverlayWindowCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'ReleaseOverlayWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -532,7 +571,9 @@ func releaseOverlayWindowRequest(c *xgb.Conn, Window xproto.Window) []byte {  	b := 0  	buf := make([]byte, size) +	c.ExtLock.RLock()  	buf[b] = c.Extensions["Composite"] +	c.ExtLock.RUnlock()  	b += 1  	buf[b] = 8 // request opcode @@ -555,6 +596,8 @@ type UnredirectSubwindowsCookie struct {  // UnredirectSubwindows sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.  func UnredirectSubwindows(c *xgb.Conn, Window xproto.Window, Update byte) UnredirectSubwindowsCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'UnredirectSubwindows' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -566,6 +609,8 @@ func UnredirectSubwindows(c *xgb.Conn, Window xproto.Window, Update byte) Unredi  // UnredirectSubwindowsChecked sends a checked request.  // If an error occurs, it can be retrieved using UnredirectSubwindowsCookie.Check()  func UnredirectSubwindowsChecked(c *xgb.Conn, Window xproto.Window, Update byte) UnredirectSubwindowsCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'UnredirectSubwindows' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -587,7 +632,9 @@ func unredirectSubwindowsRequest(c *xgb.Conn, Window xproto.Window, Update byte)  	b := 0  	buf := make([]byte, size) +	c.ExtLock.RLock()  	buf[b] = c.Extensions["Composite"] +	c.ExtLock.RUnlock()  	b += 1  	buf[b] = 4 // request opcode @@ -615,6 +662,8 @@ type UnredirectWindowCookie struct {  // UnredirectWindow sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.  func UnredirectWindow(c *xgb.Conn, Window xproto.Window, Update byte) UnredirectWindowCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'UnredirectWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -626,6 +675,8 @@ func UnredirectWindow(c *xgb.Conn, Window xproto.Window, Update byte) Unredirect  // UnredirectWindowChecked sends a checked request.  // If an error occurs, it can be retrieved using UnredirectWindowCookie.Check()  func UnredirectWindowChecked(c *xgb.Conn, Window xproto.Window, Update byte) UnredirectWindowCookie { +	c.ExtLock.RLock() +	defer c.ExtLock.RUnlock()  	if _, ok := c.Extensions["Composite"]; !ok {  		panic("Cannot issue request 'UnredirectWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first.")  	} @@ -647,7 +698,9 @@ func unredirectWindowRequest(c *xgb.Conn, Window xproto.Window, Update byte) []b  	b := 0  	buf := make([]byte, size) +	c.ExtLock.RLock()  	buf[b] = c.Extensions["Composite"] +	c.ExtLock.RUnlock()  	b += 1  	buf[b] = 3 // request opcode | 
