aboutsummaryrefslogtreecommitdiffstats
path: root/src/connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/connection.c')
-rw-r--r--src/connection.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/src/connection.c b/src/connection.c
index bcee87e..a6ad410 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -558,20 +558,27 @@ wl_closure_init(const struct wl_message *message, uint32_t size,
count = arg_count_for_signature(message->signature);
if (count > WL_CLOSURE_MAX_ARGS) {
- wl_log("too many args (%d)\n", count);
+ wl_log("too many args (%d) for %s (signature %s)\n", count,
+ message->name, message->signature);
errno = EINVAL;
return NULL;
}
+ int size_to_allocate;
+
if (size) {
*num_arrays = wl_message_count_arrays(message);
- closure = zalloc(sizeof *closure + size +
- *num_arrays * sizeof(struct wl_array));
+ size_to_allocate = sizeof *closure + size +
+ *num_arrays * sizeof(struct wl_array);
} else {
- closure = zalloc(sizeof *closure);
+ size_to_allocate = sizeof *closure;
}
+ closure = zalloc(size_to_allocate);
if (!closure) {
+ wl_log("could not allocate closure of size (%d) for "
+ "%s (signature %s)\n", size_to_allocate, message->name,
+ message->signature);
errno = ENOMEM;
return NULL;
}
@@ -1202,6 +1209,8 @@ serialize_closure(struct wl_closure *closure, uint32_t *buffer,
return size;
overflow:
+ wl_log("serialize_closure overflow for %s (signature %s)\n",
+ message->name, message->signature);
errno = ERANGE;
return -1;
}
@@ -1219,8 +1228,13 @@ wl_closure_send(struct wl_closure *closure, struct wl_connection *connection)
buffer_size = buffer_size_for_closure(closure);
buffer = zalloc(buffer_size * sizeof buffer[0]);
- if (buffer == NULL)
+ if (buffer == NULL) {
+ wl_log("wl_closure_send error: buffer allocation failure of "
+ "size %d\n for %s (signature %s)",
+ buffer_size * sizeof buffer[0], closure->message->name,
+ closure->message->signature);
return -1;
+ }
size = serialize_closure(closure, buffer, buffer_size);
if (size < 0) {
@@ -1247,8 +1261,13 @@ wl_closure_queue(struct wl_closure *closure, struct wl_connection *connection)
buffer_size = buffer_size_for_closure(closure);
buffer = malloc(buffer_size * sizeof buffer[0]);
- if (buffer == NULL)
+ if (buffer == NULL) {
+ wl_log("wl_closure_queue error: buffer allocation failure of "
+ "size %d\n for %s (signature %s)",
+ buffer_size * sizeof buffer[0], closure->message->name,
+ closure->message->signature);
return -1;
+ }
size = serialize_closure(closure, buffer, buffer_size);
if (size < 0) {