mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-10-31 22:25:25 -04:00
debug: Fix printing of new ids
The client side closure traces have incorrect object ids for new server generated objects. This is because create_proxies() overwrites the id in 'n' type arguments by storing a pointer to the actual object in the 'o' field of the union. Getting back to an id from this pointer requires accessing a structure that isn't visible outside of wayland-client.c. Add a function pointer to fish the correct value out of the argument and pass it to wl_closure_print. Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
This commit is contained in:
parent
9c05e6c475
commit
ca893075ef
4 changed files with 29 additions and 9 deletions
|
|
@ -847,7 +847,7 @@ wl_proxy_marshal_array_flags(struct wl_proxy *proxy, uint32_t opcode,
|
|||
}
|
||||
|
||||
if (debug_client)
|
||||
wl_closure_print(closure, &proxy->object, true, false);
|
||||
wl_closure_print(closure, &proxy->object, true, false, NULL);
|
||||
|
||||
if (wl_closure_send(closure, proxy->display->connection)) {
|
||||
wl_log("Error sending request: %s\n", strerror(errno));
|
||||
|
|
@ -1531,6 +1531,19 @@ queue_event(struct wl_display *display, int len)
|
|||
return size;
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
id_from_object(union wl_argument *arg)
|
||||
{
|
||||
struct wl_proxy *proxy;
|
||||
|
||||
if (arg->o) {
|
||||
proxy = (struct wl_proxy *)arg->o;
|
||||
return proxy->object.id;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
dispatch_event(struct wl_display *display, struct wl_event_queue *queue)
|
||||
{
|
||||
|
|
@ -1550,7 +1563,7 @@ dispatch_event(struct wl_display *display, struct wl_event_queue *queue)
|
|||
proxy_destroyed = !!(proxy->flags & WL_PROXY_FLAG_DESTROYED);
|
||||
if (proxy_destroyed) {
|
||||
if (debug_client)
|
||||
wl_closure_print(closure, &proxy->object, false, true);
|
||||
wl_closure_print(closure, &proxy->object, false, true, id_from_object);
|
||||
destroy_queued_closure(closure);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1559,13 +1572,13 @@ dispatch_event(struct wl_display *display, struct wl_event_queue *queue)
|
|||
|
||||
if (proxy->dispatcher) {
|
||||
if (debug_client)
|
||||
wl_closure_print(closure, &proxy->object, false, false);
|
||||
wl_closure_print(closure, &proxy->object, false, false, id_from_object);
|
||||
|
||||
wl_closure_dispatch(closure, proxy->dispatcher,
|
||||
&proxy->object, opcode);
|
||||
} else if (proxy->object.implementation) {
|
||||
if (debug_client)
|
||||
wl_closure_print(closure, &proxy->object, false, false);
|
||||
wl_closure_print(closure, &proxy->object, false, false, id_from_object);
|
||||
|
||||
wl_closure_invoke(closure, WL_CLOSURE_INVOKE_CLIENT,
|
||||
&proxy->object, opcode, proxy->user_data);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue