aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/connection.c6
-rw-r--r--src/wayland-client.c28
-rw-r--r--src/wayland-private.h2
-rw-r--r--src/wayland-server.c2
4 files changed, 29 insertions, 9 deletions
diff --git a/src/connection.c b/src/connection.c
index ccbb972..91d00c5 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -1263,7 +1263,8 @@ wl_closure_queue(struct wl_closure *closure, struct wl_connection *connection)
}
void
-wl_closure_print(struct wl_closure *closure, struct wl_object *target, int send)
+wl_closure_print(struct wl_closure *closure, struct wl_object *target,
+ int send, int discarded)
{
int i;
struct argument_details arg;
@@ -1274,8 +1275,9 @@ wl_closure_print(struct wl_closure *closure, struct wl_object *target, int send)
clock_gettime(CLOCK_REALTIME, &tp);
time = (tp.tv_sec * 1000000L) + (tp.tv_nsec / 1000);
- fprintf(stderr, "[%10.3f] %s%s@%u.%s(",
+ fprintf(stderr, "[%10.3f] %s%s%s@%u.%s(",
time / 1000.0,
+ discarded ? "discarded " : "",
send ? " -> " : "",
target->interface->name, target->id,
closure->message->name);
diff --git a/src/wayland-client.c b/src/wayland-client.c
index 58531eb..3bf659c 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -752,7 +752,7 @@ wl_proxy_marshal_array_constructor_versioned(struct wl_proxy *proxy,
}
if (debug_client)
- wl_closure_print(closure, &proxy->object, true);
+ wl_closure_print(closure, &proxy->object, true, false);
if (wl_closure_send(closure, proxy->display->connection)) {
wl_log("Error sending request: %s\n", strerror(errno));
@@ -1358,6 +1358,9 @@ queue_event(struct wl_display *display, int len)
struct wl_closure *closure;
const struct wl_message *message;
struct wl_event_queue *queue;
+ struct timespec tp;
+ unsigned int time;
+ int num_zombie_fds;
wl_connection_copy(display->connection, p, sizeof p);
id = p[0];
@@ -1371,10 +1374,23 @@ queue_event(struct wl_display *display, int len)
proxy = wl_map_lookup(&display->objects, id);
if (!proxy || wl_object_is_zombie(&display->objects, id)) {
struct wl_zombie *zombie = wl_map_lookup(&display->objects, id);
+ num_zombie_fds = (zombie && opcode < zombie->event_count) ?
+ zombie->fd_count[opcode] : 0;
- if (zombie && zombie->fd_count[opcode])
+ if (debug_client) {
+ clock_gettime(CLOCK_REALTIME, &tp);
+ time = (tp.tv_sec * 1000000L) + (tp.tv_nsec / 1000);
+
+ fprintf(stderr, "[%10.3f] discarded [%s]@%d.[event %d]"
+ "(%d fd, %d byte)\n",
+ time / 1000.0,
+ zombie ? "zombie" : "unknown",
+ id, opcode,
+ num_zombie_fds, size);
+ }
+ if (num_zombie_fds > 0)
wl_connection_close_fds_in(display->connection,
- zombie->fd_count[opcode]);
+ num_zombie_fds);
wl_connection_consume(display->connection, size);
return size;
@@ -1433,6 +1449,8 @@ dispatch_event(struct wl_display *display, struct wl_event_queue *queue)
proxy = closure->proxy;
proxy_destroyed = !!(proxy->flags & WL_PROXY_FLAG_DESTROYED);
if (proxy_destroyed) {
+ if (debug_client)
+ wl_closure_print(closure, &proxy->object, false, true);
destroy_queued_closure(closure);
return;
}
@@ -1441,13 +1459,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);
+ wl_closure_print(closure, &proxy->object, false, false);
wl_closure_dispatch(closure, proxy->dispatcher,
&proxy->object, opcode);
} else if (proxy->object.implementation) {
if (debug_client)
- wl_closure_print(closure, &proxy->object, false);
+ wl_closure_print(closure, &proxy->object, false, false);
wl_closure_invoke(closure, WL_CLOSURE_INVOKE_CLIENT,
&proxy->object, opcode, proxy->user_data);
diff --git a/src/wayland-private.h b/src/wayland-private.h
index 9bf8cb7..493e1be 100644
--- a/src/wayland-private.h
+++ b/src/wayland-private.h
@@ -211,7 +211,7 @@ wl_closure_queue(struct wl_closure *closure, struct wl_connection *connection);
void
wl_closure_print(struct wl_closure *closure,
- struct wl_object *target, int send);
+ struct wl_object *target, int send, int discarded);
void
wl_closure_destroy(struct wl_closure *closure);
diff --git a/src/wayland-server.c b/src/wayland-server.c
index 0120326..db734ee 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -150,7 +150,7 @@ log_closure(struct wl_resource *resource,
struct wl_protocol_logger_message message;
if (debug_server)
- wl_closure_print(closure, object, send);
+ wl_closure_print(closure, object, send, false);
if (!wl_list_empty(&display->protocol_loggers)) {
message.resource = resource;