[PATCH wayland 1/2] Change WL_ZOMBIE_OBJECT from 0x2 to an actual pointer

Jason Ekstrand jason at jlekstrand.net
Wed Jun 5 14:39:50 PDT 2013


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)
 {
-- 
1.8.1.4



More information about the wayland-devel mailing list