Use different closures for sending and receiving

Otherwise we can end up overwriting data in the receive buffer as we
try to send it.
This commit is contained in:
Kristian Høgsberg 2011-01-19 14:08:21 -05:00
parent 943741cb40
commit 65772ce18b

View file

@ -61,7 +61,7 @@ struct wl_connection {
int fd; int fd;
void *data; void *data;
wl_connection_update_func_t update; wl_connection_update_func_t update;
struct wl_closure closure; struct wl_closure receive_closure, send_closure;
}; };
union wl_value { union wl_value {
@ -362,7 +362,7 @@ wl_connection_vmarshal(struct wl_connection *connection,
uint32_t opcode, va_list ap, uint32_t opcode, va_list ap,
const struct wl_message *message) const struct wl_message *message)
{ {
struct wl_closure *closure = &connection->closure; struct wl_closure *closure = &connection->send_closure;
struct wl_object **objectp, *object; struct wl_object **objectp, *object;
uint32_t length, *p, *start, size; uint32_t length, *p, *start, size;
int dup_fd; int dup_fd;
@ -487,7 +487,7 @@ wl_connection_demarshal(struct wl_connection *connection,
int i, count, extra_space; int i, count, extra_space;
struct wl_object **object; struct wl_object **object;
struct wl_array **array; struct wl_array **array;
struct wl_closure *closure = &connection->closure; struct wl_closure *closure = &connection->receive_closure;
count = strlen(message->signature) + 2; count = strlen(message->signature) + 2;
if (count > ARRAY_LENGTH(closure->types)) { if (count > ARRAY_LENGTH(closure->types)) {