No description
Find a file
David Arroyo 6dffdd6b08 Fix race condition on attach and mouse track on warp
I tried running the wayland devdraw implementation on Sway 1.10,
wlroots 0.18 and encountered the error:

	xdg_surface#13: error 3: xdg_surface has never been configured

According to https://wayland.app/protocols/xdg-shell#xdg_surface ,
a client must commit a surface without a buffer, *wait* for the first
configure request from the compositor, ack it, and *only then* can
it proceed to attach a buffer to the surface and tell wayland to display it.

This was caused by the following sequence of events:

1. devdraw starts, enters gfx_main
2. `gfx_main` calls `gfx_started`, which spawns the `serveproc` thread
3. `gfx_main` enters `wl_display_dispatch`, flushing any buffered requests to
   the compositor, and enters `wl_display_poll()` to wait for incoming messages
4. `serveproc` calls `rpc_attach`, sets up the surface, and buffers a commit.

The race is between #3 and #4. If #3 happens first, the buffered commit
just sits there until `rpc_flush` is called, which calls `wl_display_flush()`,
but at that point a buffer is attached too quickly for the configure to happen.

This commit fixes the race by adding a `configured` field to the WaylandClient
and using it to guard `rpc_flush`.

In addition, I found that mouse warping, at least in sway, would move
the cursor but future mouse presses would register at the old location
until I moved the mouse. So I added a call to gfx_mousetrack to the end
of `rpc_setmouse`.
2024-11-28 16:30:25 +01:00
.github/workflows .github/workflows/actions.yaml: Run CI on pull requests too 2024-01-09 19:00:21 -05:00
acid merge 2012-03-05 16:36:31 -05:00
bin all: quiet macOS build again 2024-06-15 10:57:45 -04:00
dict all: remove .cvsignore files 2017-09-14 17:25:17 +02:00
dist all: update for new MIT license 2021-03-23 20:59:23 -04:00
face faces for lp. 2005-09-13 01:24:50 +00:00
font Fix fonts (#463) 2022-07-27 10:25:51 -04:00
include libregexp: allow up to 128 character classes in one regexp 2023-03-31 08:16:11 -04:00
lib add macedit to moveplan9.files 2022-08-18 10:48:50 -04:00
lp all: remove .cvsignore files 2017-09-14 17:25:17 +02:00
mac 9term.app: respect user-set shell instead of forcing bash 2020-05-05 09:30:39 -04:00
mail all: remove .cvsignore files 2017-09-14 17:25:17 +02:00
man man: update indexes 2024-06-15 22:10:59 -04:00
ndb ndb/local: remove rsc-specific entries (oops) 2008-06-04 13:28:05 -04:00
news odds and ends 2004-04-21 23:43:46 +00:00
plumb plumb/basic: avoid wrap around in file:1:2 (#158) 2018-11-13 23:59:04 -05:00
postscript Fix fonts (#463) 2022-07-27 10:25:51 -04:00
proto forgotten files 2005-01-13 04:56:07 +00:00
sky all: remove .cvsignore files 2017-09-14 17:25:17 +02:00
src Fix race condition on attach and mouse track on warp 2024-11-28 16:30:25 +01:00
tmac tmac: rename IM (italic manual) to MR (manual reference) 2020-08-15 20:09:40 -04:00
troff troff: import HB, HI and HX fonts from Plan 9 2017-06-15 19:09:58 +00:00
unix all: update for new MIT license 2021-03-23 20:59:23 -04:00
.gitignore .gitignore: Ignore some more things that get created during compile. 2021-08-30 21:02:29 -04:00
CHANGES CHANGES: add pointer to web version 2008-05-10 13:38:21 -04:00
configure For annoying people like Uriel. 2005-11-25 13:18:11 +00:00
CONTRIBUTING.md codereview: delete, now using GitHub pull requests 2017-09-01 13:25:20 -04:00
CONTRIBUTORS venti: fix venti graph on 64-bit 2017-07-23 11:11:56 +00:00
INSTALL INSTALL: fix $PLAN9 in message 2024-04-06 11:14:36 -04:00
install.txt install(1): mention libfontconfig1-dev for Debian 2021-04-09 15:23:55 -04:00
LICENSE all: update for new MIT license 2021-03-23 20:59:23 -04:00
Makefile For annoying people like Uriel. 2005-11-25 13:18:11 +00:00
rcmain rcmain: use new $termprog variable 2013-08-13 12:46:38 -04:00
README.md README.md: Add GH actions badge 2024-01-09 19:00:21 -05:00

This is a port of many Plan 9 libraries and programs to Unix.

Installation

To install, run ./INSTALL. It builds mk and then uses mk to run the rest of the installation.

For more details, see install(1), at install.txt in this directory and at https://9fans.github.io/plan9port/man/man1/install.html.

Documentation

See https://9fans.github.io/plan9port/man/ for more documentation. (Documentation is also in this tree, but you need to run a successful install first. After that, "9 man 1 intro".)

Intro(1) contains a list of man pages that describe new features or differences from Plan 9.

Helping out

If you'd like to help out, great!

If you port this code to other architectures, please share your changes so others can benefit.

Git

You can use Git to keep your local copy up-to-date as we make changes and fix bugs. See the git(1) man page here ("9 man git") for details on using Git.

Status

Github Actions Build Status Coverity Scan Build Status

Contact