GLContext* passes the shared-master to GLContextShareSet,
which only creates a sets of shared contexts
without differentiating the master context.
GLContext*'s shared-slave attempts to lock
the realized shared-master's surface at creation.
Currently only an arbitrary shared context is selected
due to the missing 'master' identity.
The arbitrary shared context's surface is locked
and its shared context handle used to create the slave context.
Lacking of using the user given shared-master
can lead to deadlock situations - and locking a 'wrong' surface.
The fix shall:
- Allow query the user given shared-master!
- Use the user given shared-master for locking and it's
context handle for the slave's creation.
- Constrain the shared context set to _only_ one unique master context,
to avoid confusion - fail fast! (throw exception).
(In reply to comment #0)
> - Constrain the shared context set to _only_ one unique master context,
> to avoid confusion - fail fast! (throw exception).
Such constraint would break compatibility with pre-existing applications
as well as restrict shared context usage (allowed in GL spec, i.e. not forbidden).
Instead, the shared-context mapping shall map each shared-master
to a shared-slave within one shared-context-set,
allowing deterministic and individual shared-master queries!
implements/fixes issue as described.