trummel@island.COM (Keith Trummel) (06/15/91)
I am using the shared memory extension to X (MIT-SHM) which allows the client
and server to use XImages and Pixmaps in shared memory. I want my program
to take advantage of this extension if it exists, but work properly in
environments where it is not supported. I use the function XShmQueryVersion
to see if the server supports it, but I have the following problem. If the
server supports this extension, but my client is running on a different
machine than the server I obviously can't take advantage of it. So my
question is how do I reliably tell if my client and the server are running
on the same machine?
By the way, is it a bug that XShmQueryVersion says it supports the shared
memory extension when you are running across the network? i.e should
XShmQueryVersion tell you if it can support shared memory for *some* client
or for the client with the specified connection to the server?
Keith Trummel
Island Graphics Corporation
San Rafael, CA
{sun,uunet}!island!trummel
trummel@island.com
--
Keith Trummel
Island Graphics Corporation
{sun,uunet}!island!trummel
trummel@island.comneideck@kaputt.enet.dec.com (Burkhard Neidecker-Lutz) (06/17/91)
The XShmQueryExtension call has no way of actually knowing whether it will be able to honor the following requests for MITSHM connects to a server other than whether the server supports the extension as such. It's pretty difficult to tell whether the application runs on the same host (don't suggest looking in IP-specific structures to tell, I might connect via a DECnet link...). Why ? Because even if it knew you are on the same machine, you still might be unable to actually get what you request (true of X resources in general, but much more likely so in the case of MITSHM). At least on my variant of UNIX, the number of shared memory segments a process (and hence, the X server) can have, is limited to a fairly small number, so after a few connects, you run out of slots to attach the client to the server. The approach we used finally was to ask the server if it offered MITSHM and then setting the XErrorHandler around the actual allocation. Instead of crashing we would get to know silently whether we failed (our error handler set's a flag) and could take appropriate action (i.e. fall back to the no-MITSHM) case. Ugly, but very robust. Burkhard Neidecker-Lutz, Digital Equipment Corp. CEC Karlsruhe, Project NESTOR