Gmane
From: Gary Byers <gb <at> clozure.com>
Subject: WITH-BUFFER-FLUSH-INHIBITED and TRANSLATE-DEFAULT
Newsgroups: gmane.lisp.clx.devel
Date: 2003-05-11 11:04:18 GMT (6 years, 7 weeks, 5 days, 13 hours and 59 minutes ago)
Hi.

In at least the "clocc" and "telent" versions of CLX,
XLIB:TRANSLATE-DEFAULT is often called when WITH-BUFFER-FLUSH-INHIBITED
is in effect.

The first thing that TRANSLATE-DEFAULT does in those CLX versions is
to try to call FONT-MIN-CHAR on the specified font object.  If font
information for the font has already been obtained, it'll be used;
otherwise, QUERY-FONT will try to fill in the information that
FONT-MIN-CHAR needs (the font's FONT-INFO-INTERNAL.)

QUERY-FONT will try to make a request to and read a reply from the
server.  As I read the code (and there's no reason to believe that I'm
reading it correctly ...), that request will never be flushed out to
the server (because of the surrounding WITH-BUFFER-FLUSH-INHIBITED.)
QUERY-FONT will put a few bytes in a buffer, and then wait (forever)
for a reply to a request that the server never received.  This is
certainly the behavior that I've been seeing in the telent CLX
conditionalized for OpenMCL, whenever drawing involving a font that
doesn't (yet) have its FONT-INFO-INTERNAL slot set takes place.  The
CLX image test and PHemlock's matching-paren highlighting can both
provoke this.

It seems most likely that I botched something, and the two most
likely candidates would seem to be:

a) the buffering code: it should be possible to start a new request/
   reply sequence (and have everything flushed out to the server)
   even if WITH-BUFFER-FLUSH-INHIBITED is in effect.
b) something in the font code: a font that's actually going to be
   used for text drawing should have had its FONT-INFO-INTERNAL
   set via QUERY-FONT long before that drawing takes place.

I tried this in a couple of different OpenMCL versions that use
different synchronization mechanisms and are therefore conditionalized
differently.  Whatever I botched, I seem to have botched pretty
consistently ...

Does anyone know for sure whether WITH-BUFFER-FLUSH-INHIBITED should
prevent request/reply transactions from taking place, or whether
a font's FONT-INFO-INTERNAL needs to be set (somewhere) less lazily ?

Gary Byers
gb <at> clozure.com