client: Ignore new requests if display has a fatal error
authorManuel Stoeckl <code@mstoeckl.com>
Sat, 13 Jul 2019 21:33:49 +0000 (17:33 -0400)
committerManuel Stoeckl <code@mstoeckl.com>
Tue, 10 Sep 2019 11:59:50 +0000 (07:59 -0400)
Once there has been a fatal display error, any new object requests
potentially rely on invalid state. (For example, a failure to read
from the compositor could hide a important event.) The safest way to
handle the new requests is not to make them.

Proxies produced by the request are still created, to ensure that
any code using the library does not crash from an unexpected NULL
pointer.

Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
src/wayland-client.c

index ed50281..7c93c7b 100644 (file)
@@ -740,6 +740,10 @@ wl_proxy_marshal_array_constructor_versioned(struct wl_proxy *proxy,
                        goto err_unlock;
        }
 
+       if (proxy->display->last_error) {
+               goto err_unlock;
+       }
+
        closure = wl_closure_marshal(&proxy->object, opcode, args, message);
        if (closure == NULL)
                wl_abort("Error marshalling request: %s\n", strerror(errno));