diff options
-rw-r--r-- | dix/dixutils.c | 13 | ||||
-rw-r--r-- | dix/main.c | 2 | ||||
-rw-r--r-- | include/dix.h | 2 |
3 files changed, 17 insertions, 0 deletions
diff --git a/dix/dixutils.c b/dix/dixutils.c index 540023cbd..2983174a1 100644 --- a/dix/dixutils.c +++ b/dix/dixutils.c @@ -508,6 +508,19 @@ WorkQueuePtr workQueue; static WorkQueuePtr *workQueueLast = &workQueue; void +ClearWorkQueue(void) +{ + WorkQueuePtr q, *p; + + p = &workQueue; + while ((q = *p)) { + *p = q->next; + free(q); + } + workQueueLast = p; +} + +void ProcessWorkQueue(void) { WorkQueuePtr q, *p; diff --git a/dix/main.c b/dix/main.c index 273f30330..16a7d6d39 100644 --- a/dix/main.c +++ b/dix/main.c @@ -340,6 +340,8 @@ dix_main(int argc, char *argv[], char *envp[]) DeleteCallbackManager(); + ClearWorkQueue(); + if (dispatchException & DE_TERMINATE) { CloseWellKnownConnections(); } diff --git a/include/dix.h b/include/dix.h index cf263a1f5..f2516187f 100644 --- a/include/dix.h +++ b/include/dix.h @@ -240,6 +240,8 @@ extern _X_EXPORT void RemoveBlockAndWakeupHandlers(ServerBlockHandlerProcPtr blo extern _X_EXPORT void InitBlockAndWakeupHandlers(void); +extern _X_EXPORT void ClearWorkQueue(void); + extern _X_EXPORT void ProcessWorkQueue(void); extern _X_EXPORT void ProcessWorkQueueZombies(void); |