From: Sebastian Glita <[email protected]> A simple fixup in "dixutils.c:_CallCallbacks": - by moving recursion count check *before* list iteration and actual callbacks' invocation; - can say for sure, though, whether counters (member `int inCallback' from "include/dixstruct.h:171:CallbackListRec" structure) were supposed to grow greater than 1 before iteration, - so cannot ascertain whether the new behavior is required.
The mutual recursive functions' chain: 1. dix/dixutils.c:CallCallbacks:877 2. dix/dixutils.c:_CallCallbacks:743 3. record/record.c:RecordFlushAllContexts:867 4. record/record.c:RecordFlushReplyBuffer:251 5. os/io.c:WriteToClient:824 Signed-off-by: Sebastian Glita <[email protected]> --- dix/dixutils.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dix/dixutils.c b/dix/dixutils.c index 470bb5d..e3c9c22 100644 --- a/dix/dixutils.c +++ b/dix/dixutils.c @@ -737,6 +737,8 @@ _CallCallbacks( CallbackListPtr cbl = *pcbl; CallbackPtr cbr, pcbr; + if (cbl->inCallback) return; + ++(cbl->inCallback); for (cbr = cbl->list; cbr != NULL; cbr = cbr->next) { @@ -744,8 +746,6 @@ _CallCallbacks( } --(cbl->inCallback); - if (cbl->inCallback) return; - /* Was the entire list marked for deletion? */ if (cbl->deleted) -- 1.7.3.1 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
