On Jun 6, 2013 1:37 AM, "Pekka Paalanen" <[email protected]> wrote: > > 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?
Even better, server side should never use zombie objects at all. However, it is used in connection.c, so I had to put it in wayland-util. This is one of those places where the "shared code" between client and server isn't quite as generic/universal as one would like. Thanks for reviewing, --Jason Ekstrand
_______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
