Hi, I just want to provide some perspective on this issue, which has arisen quite early I started the Rust bindings.
25 mars 2019 10:20 "Pekka Paalanen" <[email protected]> a écrit: > One idea is arguably a hack: the first word pointed to by a wl_proxy > userdata could be a magic value, that allows the toolkit to identify > its own userdata. This is actually pretty similar to how user-data is handled in wayland-rs : the user data mechanism is actually a typed API, which will refuse access to the user data (return Option::None) if either the requested type does not match the stored type or the user-data of the proxy is not threadsafe and access is requested from an other thread than the one that set it up. This allows toolkits built on wayland-rs to relatively easily identify if an object belongs to them or not. Toolkits will mostly use private types as user data, meaning the risk of a proxy having the proper type as user data while still not belonging to you is zero. A second layer of this issue also arose at the level of integration of wayland-rs with liwayland. wayland-rs tracks more state than libwayland to provide the additional safety guarantees that an idiomatic Rust API requires. When wayland-rs is used as a Rust implementation of the protocol, it just does it internally. When it is used as a wrapper around libwayland, it hijacks the user-data mechanism of libwayland to store its additional state, and expose its own typed user-data mechanism on top of that. Wayland-rs thus needs to distinguish objects that were created by it from objects that were not. To achieve this, given it already uses its own dispatcher function, it simply stores a magic value in the "implementation" field of the proxy and the actual implementation along with the rest of its state in the user data. This magic value is a pointer to some static variable defined in wayland-rs. This allows the crate to distinguish its own objects from the ones from elsewhere, even other versions of itself (cargo occasionally links different versions of the same crate into a single binary, treating them as just two different crates). I don't know how much of a "hack" this all is, but this has worked quite well in practice. Victor. _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
