After display protocol error communication between wayland protocol and client is broken.

Pekka Paalanen ppaalanen at gmail.com
Sun Dec 30 09:12:32 UTC 2018


On Fri, 28 Dec 2018 15:46:23 +0530
Ikshwaku Chauhan <ikshwaku.ec2004 at gmail.com> wrote:

> Hello Pekka, Hello Dima,
> 
> Thanks for your prompt responce.
> After analyzing the below wayland client logs we concluded that we are
> getting the *Protocol Error: Invalid Object*, because we are trying to set
> the property of a destroyed surface.

...

> [217759.719]  -> ivi_controller at 6.surface_create(80, new id
> ivi_controller_surface at 22)
> [217759.822] ivi_input at 7.input_acceptance(80, "default", 1)
> [217763.257]  -> wl_display at 1.sync(new id wl_callback at 23)
> [217764.394] wl_display at 1.delete_id(23)
> [217764.456] wl_callback at 23.done(0)
> [217765.170]  -> wl_display at 1.sync(new id wl_callback at 23)
> [217765.660] wl_display at 1.delete_id(23)
> [217765.871] wl_callback at 23.done(0)
> [217765.921]  -> ivi_controller_surface at 22.set_source_rectangle(0, 0, 800,
> 480)
> [217766.272]  -> wl_display at 1.sync(new id wl_callback at 23)
> [217773.004] wl_display at 1.error(wl_display at 1, 0, "invalid object 22")
> 
> Could you please have a look and share your inputs about our findings.
> Attaching the complete logs.
> 
> Here we have a use case, where we are creating and destroying the surfaces
> very quickly.
> One more thing this is an some time issue.

Well, I do not see why object id 22 would not exist in that log,
it was just created.

If I had to guess, you have a compositor-side bug. Either the
wl_resource for id 22 in the ivi_controller.surface_create call is
not created at all, or it is created and then destroyed unwarranted
by the protocol.

Whenever a protocol message is creating a new object, the message
handler in the compositor cannot ever choose to not create the
wl_resource for it. Likewise, wl_resources cannot be destroyed
without an explicit warrant from protocol exchange, e.g. a destroy
request.

I'm guessing that you use global identifiers (the argument 80) to
identify surfaces, that "surface 80" does not exist anymore, so you
skip creating the wl_resource. That would be a bug.

If so, this also shows a fundamental flaw in global identifiers
like that: a client can never be sure that the global identifier is
valid. Therefore you must design the ivi_controller_surface
interface to deal with the fact that the global identifier it was
created with was or became invalid, and add an event to tell the
client the ivi_controller_surface is invalid. That event would then
allow the client to destroy the ivi_controller_surface, which would
let the compositor destroy the wl_resource.

Another corollary to this is that every interface that uses or
refers to a ivi_controller_surface object must be prepared to deal
with one that points to an invalid or non-existent underlying
surface. No amount of Wayland roundtrips will save you from that.


Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20181230/b3b2d0d1/attachment.sig>


More information about the wayland-devel mailing list