dix: Add ClientSignalAll()
This is a variant of ClientSignal() that signals all clients with an
optional matching sleeping client, function and closure.
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
(cherry picked from commit bc3634010c
)
This commit is contained in:
parent
c06a4b4a24
commit
204e85786f
|
@ -620,6 +620,28 @@ ClientSignal(ClientPtr client)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
int
|
||||
ClientSignalAll(ClientPtr client, ClientSleepProcPtr function, void *closure)
|
||||
{
|
||||
SleepQueuePtr q;
|
||||
int count = 0;
|
||||
|
||||
for (q = sleepQueue; q; q = q->next) {
|
||||
if (!(client == CLIENT_SIGNAL_ANY || q->client == client))
|
||||
continue;
|
||||
|
||||
if (!(function == CLIENT_SIGNAL_ANY || q->function == function))
|
||||
continue;
|
||||
|
||||
if (!(closure == CLIENT_SIGNAL_ANY || q->closure == closure))
|
||||
continue;
|
||||
|
||||
count += QueueWorkProc(q->function, q->client, q->closure);
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
void
|
||||
ClientWakeup(ClientPtr client)
|
||||
{
|
||||
|
|
|
@ -255,6 +255,14 @@ extern _X_EXPORT Bool ClientSleep(ClientPtr client,
|
|||
extern _X_EXPORT Bool ClientSignal(ClientPtr /*client */ );
|
||||
#endif /* ___CLIENTSIGNAL_DEFINED___ */
|
||||
|
||||
#ifndef ___CLIENTSIGNALALL_DEFINED___
|
||||
#define ___CLIENTSIGNALALL_DEFINED___
|
||||
#define CLIENT_SIGNAL_ANY ((void *)-1)
|
||||
extern _X_EXPORT int ClientSignalAll(ClientPtr /*client*/,
|
||||
ClientSleepProcPtr /*function*/,
|
||||
void * /*closure*/);
|
||||
#endif /* ___CLIENTSIGNALALL_DEFINED___ */
|
||||
|
||||
extern _X_EXPORT void ClientWakeup(ClientPtr /*client */ );
|
||||
|
||||
extern _X_EXPORT Bool ClientIsAsleep(ClientPtr /*client */ );
|
||||
|
|
Loading…
Reference in New Issue