[PATCH wayland 1/2] Change WL_ZOMBIE_OBJECT from 0x2 to an actual pointer
Pekka Paalanen
ppaalanen at gmail.com
Wed Jun 5 23:36:58 PDT 2013
On Wed, 5 Jun 2013 16:39:50 -0500
Jason Ekstrand <jason at jlekstrand.net> wrote:
> In order to use the second-lowest bit of each pointer in wl_map for the
> WL_MAP_ENTRY_LEGACY flag, every pointer has to be a multiple of 4. This
> was a good assumption, except with WL_ZOMBIE_OBJECT. This commit creates
> an actual static variable to which WL_ZOMBIE_OBJECT now points. Since
> things are only every compared to WL_ZOMBIE_OBJECT with "==" or "!=", the
> only thing that matters is that it is unique.
>
> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
> src/wayland-private.h | 5 +++--
> src/wayland-util.c | 2 ++
> 2 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/src/wayland-private.h b/src/wayland-private.h
> index a648538..6f7a347 100644
> --- a/src/wayland-private.h
> +++ b/src/wayland-private.h
> @@ -34,13 +34,14 @@
> const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
> (type *)( (char *)__mptr - offsetof(type,member) );})
>
> -#define WL_ZOMBIE_OBJECT ((void *) 2)
> -
> #define WL_MAP_SERVER_SIDE 0
> #define WL_MAP_CLIENT_SIDE 1
> #define WL_SERVER_ID_START 0xff000000
> #define WL_CLOSURE_MAX_ARGS 20
>
> +extern struct wl_object global_zombie_object;
> +#define WL_ZOMBIE_OBJECT ((void*)&global_zombie_object)
> +
> /* Flags for wl_map_insert_new and wl_map_insert_at. Flags can be queried with
> * wl_map_lookup_flags. The current implementation has room for 1 bit worth of
> * flags. If more flags are ever added, the implementation of wl_map will have
> diff --git a/src/wayland-util.c b/src/wayland-util.c
> index 162b352..7a0b268 100644
> --- a/src/wayland-util.c
> +++ b/src/wayland-util.c
> @@ -29,6 +29,8 @@
> #include "wayland-util.h"
> #include "wayland-private.h"
>
> +struct wl_object global_zombie_object;
> +
> WL_EXPORT void
> wl_list_init(struct wl_list *list)
> {
So, global_zombie_object gets compiled into wayland-util.o, which makes
it private/hidden in both libwayland-server.so and
libwayland-client.so. Is there any danger of these getting mixed up,
when a program links to both?
The identity of the zombie depends on which library's util functions
actually get called, right? Looking at wayland-util.h, there are no
public entry points that would both be shared and access a wl_map. Only
functions unique to either libwayland-server or libwayland-client will
access a wl_map, so I assume they would be linked to the wayland-util.o
symbols in that specific library. Default visibility = hidden should
guarantee that.
Am I right that there is no danger here?
Thanks,
pq
More information about the wayland-devel
mailing list