in gymvnc/gymvnc.go [259:296]
func (c *VNCSession) Flip() (*Screen, []*vncclient.FramebufferUpdateMessage) {
c.updated.L.Lock()
defer c.updated.L.Unlock()
var updates []*vncclient.FramebufferUpdateMessage
if c.backUpdated {
c.frontScreen, c.backScreen = c.backScreen, c.frontScreen
c.backUpdated = false
updates = c.deferredUpdates
go func() {
c.updated.L.Lock()
defer c.updated.L.Unlock()
c.applyDeferred()
if c.pauseUpdates {
// Restart the framebuffer request cycle
c.pauseUpdates = false
log.Infof("[%s] resuming updates", c.label)
err := c.requestUpdate()
if err != nil {
select {
case c.mgr.Error <- err:
default:
}
}
}
}()
if c.rendererActive {
// Keep the GL screen fed
c.renderer.Apply(updates)
}
}
return c.frontScreen, updates
}