summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2013-06-05 16:39:50 -0500
committerKristian Høgsberg <krh@bitplanet.net>2013-06-05 17:45:36 -0400
commit8fd60c683a3da7299b0c891c73e26385ed895f16 (patch)
treeb909a2a68972146b3d6f7542220c48df092761f9
parenta3870a297c7ee98085c0cd4c1a0b6372ecda05f5 (diff)
Change WL_ZOMBIE_OBJECT from 0x2 to an actual pointer
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@jlekstrand.net>
-rw-r--r--src/wayland-private.h5
-rw-r--r--src/wayland-util.c2
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)
{