                          XMX Version 2.1 Bug List
-----------------------------------------------------------------------------
DATE: 27apr98	VERSION: 2.1alpha patchlevel 7
-----------------------------------------------------------------------------
no. name	description					fixed	patch
--- ----------- ----------------------------------------------- ------  -----
001 copy&free	CopyColormapAndFree protocol request not	yes	1
		implemented.

002 swapping	byte swapping code still has bugs		yes	7

003 partfail	if a request succeeds with xmx and at least	no	-
		one server, but fails on at least one other
		server, xmx is screwed.  This happens partic-
		ularly with fonts, but allocation errors can
		happen anytime.  This is a difficult problem.

004 atomleak	replies to QueryFont and ListFontsWithInfo	yes	2
		requests may contain invalid atoms.  To fix
		this requires either mapping atoms or handling
		fonts locally.  [hacked - query names of
		missing atoms, and patch font info replies
		before returning them - this fix is incomplete,
		see bug 033].

005 set_mapping	SetPointerMapping and SetModifierMapping are	yes	7
                not implemented.

006 kbd_mapping	xmx informs clients of only one of many		yes	7
		possible keyboard mappings.  This will be
		done correctly in a future version.

007 monobogus	depth 2 StaticGray (i.e. monochrome) displays	no	-
		are assumed to have whitePixel==0 and
		blackPixel==1.

008 staticCmap  static colormaps (StaticGray, StaticColor or	no	-
		TrueColor) are not mapped in any way.

009 sgi_index	under IRIX 4.0.5f (and possibly other		yes	1
		versions), variables named "index" in image.c
		mistaken by compiler for index library routine.
		[Changed variable names].

010 trainwreck	in queue_flush, EWOULDBLOCK on write: a		yes	1
		partial write of a singly-referenced chunk
		derails and causes fiery crash.  [Missing
		list_clear inserted].  Also, in multiply-
		referenced case, buf_clear of newly created
		chunk is always wrong.  [Removed].  [This was
		exercised by ico, but very load dependent.
		A server grab by another client would often
		forced it to happen].

011 allow_not	AllowEvents request always ignored when		yes	1
		request contained CurrentTime (ie zero).
		[exercised by mwm root popups].

012 imake_not	Imakefiles initially a mess - particularly	yes	1
		./include/Imakefile.  [Tweaked to have a
		better separation of X and xmx, added
		XmxInstallRoot define for separate install].
		[README.install clarified].

013 1bitcolors	Pixel values used by depth 1 gc's and windows	yes	1
		mapped to bogus values.  [Special-cased
		mapping].

014 autocmap	Automatic colormap allocation prompted by	yes	1
		BadAlloc in default root colormap fails due
		to malformed resource id.

015 freehash	Server hash tables never freed.			yes 	1

016 rootattrs	Root window attributes are not propagated	yes	1
		to new (added) servers if changed from the
		defaults first.  [Hacked for the case of
		BackPixmap and BackPixel]

017 addhangs	Adding a server sometimes hangs - appears	yes	2
		to happen when there are many resources
		allocated [break up ketchup phase].
		Also, a server add can generate more requests
		(that require replies - GetImage) than xmx can
		record sequence numbers for.  [make the seqm
		module fold together similar "reply" seqno's]

018 teletrail	Telepointers leave a trail of marks when	no	-
		rubberbanding or dragging a frame around
		(exercised by twm).

019 popupbgnd	Backgrounds of twm popup windows on added	yes	1
		servers are transparent.  [Some window
		attribute defaults are "undefined" which,
		as stored in xmx, are indistinguishable
		from a non-default (e.g. null) value -
		hacked].

020 queryptr	When -geometry specifies an offset from		yes	1
		(0,0), QueryPointer requests return an
		incorrect window-relative location.
		[Virtual root window offset was being
		factored in].

021 sync_add	When an add hangs, xmx hangs.			no	-

022 multiexpos	Some requests cause identical exposure		yes	1
		events to be generated by all servers,
		resulting in repeated, redundant repaints.
		[Implemented delayed exposure processing
		to eliminate or minimize multiple, identical,
		simultaneous exposures]

023 forcecmap	A forced root colormap allocation (as a		yes	1
		result of a failed cell allocation in the
		default root) causes xmx to hang.

024 crash1	Client termination (cliz_kill_client)		yes	1
		processing fails to register sequence
		numbers for ChangeWindowAttributes
		requests (generated from inp.c, routine
		free_client_grabs), causing lost seqno's
		shortly thereafter, and abort.

025 lostseq	The first reply to ListFontsWithInfo frees	yes	1
		the sequence number mapping for that request.
		Subsequent replies *may* result in lost
		sequence numbers (but not necessarily).

026 cmap_notify	ChangeWindowAttributes request does not		yes	1
		generate a ColormapNotify event.

027 tptr_freeze	Telepointer tracking at times freezes.		yes	2
		Button clicks update the position, but
		tracking never resumes, though other
		processing appears to continue unimpeded.
		[MotionNotify's get eaten in reply.c -
		fixed]

028 tptr_init	Newly added displays sometimes have no		yes	2
		telepointer until local pointer movement
		occurs.

029 rgb_dbm	Rgb module access text file rather than		yes	5
		dbm file.

030 enoexist	Generates spurious error messages when		yes	1
		the default Xauthority file does not
		exist.

031 64-bit	Does not work on DEC-alpha, probably due	no	-
		to incompatibility with 64-bit architecture.

032 select_rval	The return value of select(2) is ill-defined	yes	2
		and implementation-specific.  Its use in
		main.c is sensitive to these variations - in
		particular, it causes crashes under IRIX.

033 bad_atoms	If a font defines a font property not known	no	-
		to xmx (not predefined, and not part of the
		X Logical Font Description standard), and
		its value is also an atom, xmx will allow
		the unknown value atom to be seen by client
		applications.  This is related to bug 004,
		atomleak, and is part of a continuing saga.
		The proper fix is to load fonts in xmx.

034 die_on_exit	Under IRIX (and possibly others) xmx aborts	yes	2
		when some clients exit normally.  Clients
		with retained resources that exit break
		their socket connection, but xmx fails to
		clear the bit in the fd_mask used in select.
		Under IRIX, this invalid bit causes select
		to return an error.

035 exposmania	Telepointers are *really* slow when used with	no	-
		some X servers.  Telepointers are implemented
		as windows with the SaveUnder hint.
		SaveUnder's are never guaranteed, even by
		servers which support them.  When SaveUnders
		are not performed for telepointer windows,
		those servers generate expose events for every
		incremental mouse movement, and those
		exposures, though filtered by xmx, result in
		many screen repaints.  This is bad.  If the
		server won't do SaveUnders, don't use
		telepointers.

036 orph_pxmps	Cursors maintain references to pixmaps used	yes	2
		to create them, even though those pixmaps
		can be deleted by client apps.  Manifested at
		server add time as BadPixmap proto errors.
		[use telepointer (xmx-private) copies of those
		pixmaps as sources].

037 pm_free_not	The boolean return value of pixmap_free is	yes	2
		the reverse of what is expected by the code
		that calls it.

038 setup_race	If the initial colormap allocation request	yes	2
		fails, during server setup, a request is
		generated (ChangeWindowAttributes) that
		references a resource that does not yet
		exist (the window).  [special case initial
		setup].

039 seqno_dup	A bug in queue_flush (write loop) causes	yes	2
		chunks to be reprocessed if they fail to be
		written due to a blocked write.  Manifested
		most often as a lost reply sequence number,
		but beyond (in the protocol stream) where the
		actual error occurred.

040 empty_pmap	When an added display is forced to allocate	yes	2
		a private colormap (because it can't allocate
		enough cells in the default root colormap)
		during server setup, it fails to initialize
		the pixelmap but continues to use it, making
		all the colors drawn incorrect.  [throw out
		the pixelmap].

041 emask_init	Windows created during the "ketchup" phase	yes	2
		of a server add, whose event masks are the
		default value, do not have their event masks
		set correctly.

042 seqno_obo	Client and virtual client sequence numbers	yes	3
		inconsistent - off by one (client seqno is
		last request, virtual client is next request).
		[normalized - all now are "next"].

043 real_chill	Macro fd_chill is wrong - can cause some	yes	3
		fd's to be starved for i/o.  Looks like a
		client (or, theoretically, a server) hangs.

044 badadd_gc	GCs created during the ketchup phase of a	yes	3
		server add are always created with the depth
		of the default root window.  Results in a
		BadMatch error, eventually (and app abort).

045 clnt_linger	Clients that select for input on windows that	yes	4
		they do not own linger internally after they
		have disconnected (an input mask attached to
		the window is retained).  May cause a memory
		error.

046 noservhang	Hangs if all X servers go away.			yes	4
		[exits instead].

047 chunk_ref	Chunks queued, pending a write, whose buffer	yes	4
		is freed (commonly due to client or server
		death) are freed, but remain referenced by
		the queue.  Reference causes abort in debug
		code.  [mark buffer instead, postpone free
		until write has occurred].

048 nclient++	Count of clients, num_client, is never		yes	4
		decremented.

049 client_ref	Client requests may generate replies, events	yes	4
		or errors after the client has died.
		References to these clients remain in request
		history (seqm) and partial packet info (pp)
		and result in usually fatal attempts to
		route the packets back.  [retain indirect ref
		instead, and check for client existence before
		processing].

050 softerr	Soft reply errors - exposures for recently	yes	4
		destroyed windows, for instance - clutter
		stderr.  [reclassified as a debug option].

051 listhosts	ListHosts requests treated as "no-reply"	yes	4
		requests, internally.  Probably never
		exercised.  [fixed anyway].

052 mungevent	Successful GrabPointer and GrabKeyboard		yes	4
		replies generated by xmx are munged
		internally by out-of-sequence event
		generation (enter/leave events), which
		causes the reply and subsequent events
		to be misidentified - a subtle bug.
		Not sure what, if any, bad behavior this
		may cause.

053 mungwrite	Under load and with multiple servers		yes	4
		connected, xmx appears to lose track of
		some protocol, eventually resulting in
		an unidentifiable reply and abort.
		[rewrote the section of queue_flush that
		handles EWOULDBLOCK errors - much of this
		code was flawed].

054 umask	The user's umask affects unix domain socket	yes	5
		creation.

055 autograb	Automatic grabs initiated from windows with	yes	5
		OwnerGrabButtonMask set in their event masks
		are treated as if owner_events was false,
		rather than true.  Contributes, with bug 056,
		to a failure to recognize pulldown menu
		selections in the trestle toolkit.

056 noeventprop	During an active grab, when owner_events is	yes	5
		true, events are not propagated up the window
		heirarchy.

057 hpcolors	Color problems when run from an HPUX machine	no	-
		(HP9000/735, HP-UX A.09.03).

058 getimage	GetImage replies for rectangles of width	yes	5
		less than the width of the source drawable
		are truncated or otherwise munged by xmx.

059 handup1	Xmc clients that select for x events don't	yes	5
		get them (unless they perform a
		ChangeWindowAttributes x request for event
		mask after doing a SetEventMask xmc request).

060 handup2	Xmc clients that select for x events on all	yes	5
		windows get them only from windows that exist
		at the time of the selection, not future ones.

061 handup3	Handup x events are not propagated up the	yes	5
		window heirarchy, and are not reported with
		respect to the xmc-client-selected window.

062 xmc_alloc	xmc_alloc routine treats newly malloc'd space	yes	5
		as though it was initialized (pulled off a
		free list), which it never is.  Random
		behavior results.

063 xbench	When large volumes of protocol are received	yes	5
		from a client, parts of the buffering
		subsystem are exercised that corrupt memory
		still in use.  Exercised by xbench -
		manifested as munged requests received by
		X server and first evident as protocol errors
		received by xmx.

064 mallocmax	Buffer sizes increase without bound.  In	yes	5
		practice, growth is naturally limited, but
		in situations where there are significant
		disparities in performance of displays, the
		buffers of slower ones will continually grow.
		[input buffers now have a hard size limit and
		clients may now be blocked until a buffer
		empties].

065 addfail	When a server add fails due to connection	yes	6
		refused, the reset semaphore is decremented
		twice and xmx hangs.

066 denyabort	When a client connection is refused, xmx	yes	6
		crashes (bug introduced in patch 5).

067 setaccess	SetAccessControl requests ignored.		yes	6

068 accessctl	ChangeHosts and SetAccessControl requests	yes	6
		are not restricted to the connections from
		the local host.

069 depth-bpp	The length of image data is calculated as a	yes	6
		factor of depth, not bits per pixel.  When
		they do not match, Get/PutImage requests are
		munged.  Exercised by 24-bit visuals.
		[see also bug 073].

070 tptr_start	The ghost of bug 028 - no telepointer on	yes	6
		newly added displays.

071 tptr_clean	When an input source is killed, the tele-	yes	6
		pointer it was controlling is not hidden.

072 configure	ConfigureWindow requests that change		yes	6
		CWStackMode via either Above or Below
		scramble the window heirarchy.  Exercised
		by mwm (causes xmx to core dump).

073 depth-slp	The scanline pad specified for a particular	yes	7
		Z format (depth > 1) is not honored for
		some internal operations (image_data()), and
		could cause a client to hang.

074 mwm-cmap	Mwm fails to generate InstallColormap requests	yes	7
		for clients with private cmaps that get the
		colormap focus.  Probably due to a deficiency
		in xmx event delivery (works for twm). [fix
		not actually verified, but seems to have gone
		away amidst other bug fixes]

075 instll_cmap	Because xmx installs colormaps by setting the	yes	6
		colormap attribute of the top-level xmx window,
		colormaps of a visual different from that
		window cause a BadMatch error from the server.
		[instead, it now sets the WM_COLORMAP_WINDOWS
		property, which leads to bug 081].

076 deny_eh	When a connection is denied by xmx, the		yes	6
		server response is queued, but the connection
		is severed before it is delivered.

077 cmap_orph	When a colormap is freed, windows which		yes	6
		reference it continue to, and no ColormapNotify
		event is generated.

078 maxinstcm	MinInstalledMaps colormaps is the largest	yes	7
		number of colormaps ever installed.
		[Min and MaxInstalledMaps are meaningless
		in xmx.  No colormaps are ever actually
		installed anywhere, any and all are potentially
		installed somewhere, and there is no way
		to reconcile the installed lists from the
		various servers.]

079 qcol24	QueryColors of DirectColor and TrueColor	yes	6
		colormap returns incorrect values due to pixel
		mask miscalculation.

080 exposeorder	Xmx plays fast and loose with event/reply	no	-
		ordering.  In particular, exposures caused
		by client requests (because they originate
		at the X servers) may arrive *after*
		subsequent requests have been processed and
		related events or replies have been sent
		to the client.  Uncovered by the scrolling
		mechanism in netscape, which interleaves
		ConfigureWindow requests (which generate
		Expose events) and GetInputFocus (i.e. sync)
		requests.

		Inaccurate event/reply ordering is also
		suspected of causing some clients to hang.

081 WM_CMAP_WND	Xmx installs colormaps by reordering the	no	-
		window list contained in the
		WM_COLORMAP_WINDOWS property on its top-
		level window on each remote display.  If
		no window exists for a particular colormap,
		it cannot be installed because it cannot
		be listed.  Fixable, but I cannot think of
		a situation in which this would occur.

082 eventtime	Failed to update current time before time	yes	6
		check in focus_setwindow.  Tickled by
		fvwm's use of timestamps in SetInputFocus
		requests (resulting in loss of focus control).

083 initstcmap	Xmx -owncmap tries to initialize its default	yes	6
		colormap with the contents of the query
		server's default colormap - even if they
		are static.

084 grabhang	If a GrabServer request is executed before	yes	6
		a partial request has been fully transmitted,
		no requests can be sent to any server until
		the grab is released.  Session appears to
		hang.

085 clntabort	If xmx notices an X client has aborted while	yes	6
		writing to it, the client is improperly shut
		down which tickles a sanity check and causes
		xmx to abort.

086 tptrlose	When a server loses the floor, any telepointer	yes	6
		that was tracking it remains onscreen, frozen,
		after the server stops providing motion events.

087 focustime	When a client makes focus requests with time	yes	6
		stamps (as fvwm does), xmx sets its notion
		of the last focus time incorrectly, which
		causes many focus requests to be rejected by
		xmx that should be executed.  Related, but
		not identical to bug 082.

088 nofocwindow FocusIn and FocusOut events report a bogus	yes	6
		window id in all cases.

089 winoknot	Xmx fails to reject bad CreateWindow requests	yes	6
		in some cases (width or height equal to zero,
		for instance).  Requests fail at the servers
		and are not rolled back in xmx, causing
		inconsistencies which eventually are fatal.
		Related, but not identical to the more general
		bug 003.

090 propreplace	The size of a property modified by a		yes	6
		ChangeProperty request never decreases.
		Garbage is appended to property data returned
		by a GetProperty request of a property for
		which a ChangeProperty request decreasing its
		size has been made.

091 xmcauthgak	Authorization protocol names and data in XMC	yes	6
		client connection blocks are not removed from
		the incoming data stream, causing all
		subsequent protocol to be hosed.  Causes XMC
		clients to hang.

092 pendinglock If xmx is servicing a partial client request	yes	6
		at the time it enters a "pending" server
		dialog (e.g. in response to a QueryFont
		request from another client) xmx is deadlocked
		and hangs.  This is a rare but repeatable
		problem.

093 timeouts	Implemented client and server timeouts.		yes	6
		These are now independently settable and
		default to 60 secs (as X servers do).

094 resethang	When an add display fails, xmx hangs.		yes	6
		[hacked fix - better fix in future release].

095 pgrabsearch	Xmx incorrectly implements the search for	yes	7
		passive key and button grabs.

096 ignoremods	Shift, Lock and Control modifiers are ignored	yes	7
		during passive grab processing.

097 colorhang	If a client needs more color cells than		yes	7
		currently available in xmx, and xmx requests
		more cells and gets a BadAlloc response, xmx
		hangs (fails to decrement a semaphore).

098 resize	When a virtual root shell window is resized	yes	7
		vertically, the inner (real) virtual root
		is resized to a garbage value.

099 inputonly	Xmx attempts to create InputOnly windows on	yes	7
		added displays with attributes disallowed for
		for them by X protocol.  Results in BadMatch
		errors and failed requests.

100 resrefs	Fonts, pixmaps and cursors may be freed even	yes	7
		though they are referenced by other resources.
		[fixed a number of related smaller bugs as
		well].

101 depth1	Xmx quietly compensates when an X server fails	yes	7
		to list depth 1 in its connection block (a
		protocol violation, btw), but does so
		incompletely and burps on it's own sanity
		check.

102 queue_uiv	When a client dies, an initialized variable	yes	7
		(uiv) can cause an abort or hang.

103 seqno_range	Errors received for non-reply generating	yes	7
		requests can be incorrectly interpreted if
		a client seqno gap exists in the sequence
		map entry for that client.

104 vseqNO	The virtual client (client zero) sequence	yes	7
		is not correctly maintained (in routine
		tptr_genx_newim, when a telepointer changes
		size, ChangeWindowAttributes is omitted from
		the count).

105 errseqno	Xmx always sets the sequence number of errors	yes	7
		to the last client sequence number it has
		seen.  This sometimes causes clients to
		misinterpret errors and bomb, when they could
		have recovered.

106 authaccess	Xmx allows connections from localhost, even	yes	7
		if authorization is in effect and they lack
		the proper credentials.

107 badvis	A GetImage request on a window must be		no	-
		forwarded to a server on which that window
		is visible (a window must be reported as
		visible to the client if it is visible on
		any server).  Such requests are always
		forwarded to the query server, and if the
		window is not visible, the data returned
		is undefined.  (exercised by the exposure
		processing of adobe's acroread).

108 read_not	On some systems (Solaris 2.x) read(2) may	yes	7
		fail with EAGAIN if there is insufficient
		memory available for kernel socket buffers.
		Xmx assumes that a read of a fd always
		succeeds if select(3c) says it is ready.
		Causes occasional spontaneous deaths of
		clients.

109 noplay	When a synchronous grab thaws, the routine	yes	7
		play_events never processes stored pointer
		events.  Occasionally causes grabs to tie
		up user input (while allowing exposures and
		other processing to continue).

110 noautograb	Autograbs happen even if there is an existing	yes	7
		grab in progress.

111 grabrelease Passive pointer grabs and autograbs are not	yes	7
		released until a ButtonRelease event is
		received, even if the state of the pointer
		shows no buttons pressed.  If the ButtonRelease
		event is lost, causes user input to lock up.

112 lostevent	Events can be lost or improperly processed by	yes	7
		xmx when a device is frozen.  In particular,
		a ButtonRelease event queued while the pointer
		is frozen (by a keyboard grab with pointer mode
		sync) fails to release a grab when replayed.
		There is a lot wrong here.

113 allowevents	AllowEvents is implemented incorrectly.  It	yes	7
		does several things wrong.

114 ptrfreeze	When the pointer is frozen by a keyboard grab,	yes	7
		it is not unfrozen when the grab is released.

115 autoungrab	Active pointer and keyboard grabs are not	yes	7
		released automatically when the event (or
		confineto) windows become not viewable.

116 unmap_focus	Focus does not revert when the focus window	yes	7
		is unmapped.

117 nolocalauth	When run with authority on, xmx does not allow	yes	7
		connections through local (unix) connections,
		even with valid credentials.

118 doors	Under Solaris 2.6, local X connections are	no	-
		made via pipes rather than unix domain sockets.
		Workaround is to use the "unix:1" notation with
		clients so they will use sockets.  Need to
		teach xmx about pipes.
