Read/Write mutex for Extensions map
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user