diff --git a/code/serve-event.lisp b/code/serve-event.lisp
index 3b99df00d5896b0cc41eedc09854cfab1723a93c..c188f45af31ffea714c1dbaa903538a6ef5b8247 100644
--- a/code/serve-event.lisp
+++ b/code/serve-event.lisp
@@ -7,7 +7,7 @@
 ;;; Scott Fahlman or slisp-group@cs.cmu.edu.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/serve-event.lisp,v 1.8 1991/05/22 00:19:39 ram Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/serve-event.lisp,v 1.9 1991/05/22 17:47:15 ram Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -269,7 +269,14 @@
   #+clx
   (dolist (d/h *display-event-handlers*)
     (let ((d (car d/h)))
-      (when (xlib::event-listen d)
+      (declare (inline member))
+      ;;
+      ;; If in the *descriptor-handlers*, then we are already waiting for input
+      ;; on that display, and we don't want to do it recursively.
+      (when (and (not (member (fd-stream-fd (xlib::display-input-stream d))
+			      *descriptor-handlers*
+			      :key #'handler-descriptor))
+		 (xlib::event-listen d))
 	(handler-bind ((error #'(lambda (condx)
 				  (declare (ignore condx))
 				  (flush-display-events d))))