On Wed, 5 Jun 2013 16:39:50 -0500 Jason Ekstrand <[email protected]> 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 <[email protected]> > --- > 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 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
