diff --git a/src/connection.c b/src/connection.c index 354d8b3c..a62da785 100644 --- a/src/connection.c +++ b/src/connection.c @@ -58,7 +58,7 @@ struct wl_ring_buffer { char *data; size_t head, tail; uint32_t size_bits; - uint32_t max_size_bits; /* 0 for unlimited */ + uint32_t max_size_bits; }; #define MAX_FDS_OUT 28 @@ -197,9 +197,6 @@ get_max_size_bits_for_size(size_t buffer_size) { uint32_t max_size_bits = WL_BUFFER_DEFAULT_SIZE_POT; - /* buffer_size == 0 means unbound buffer size */ - if (buffer_size == 0) - return 0; while (max_size_bits < 8 * sizeof(size_t) && size_pot(max_size_bits) < buffer_size) max_size_bits++; @@ -231,10 +228,7 @@ ring_buffer_get_bits_for_size(struct wl_ring_buffer *b, size_t net_size) { size_t max_size_bits = get_max_size_bits_for_size(net_size); - if (max_size_bits < WL_BUFFER_DEFAULT_SIZE_POT) - max_size_bits = WL_BUFFER_DEFAULT_SIZE_POT; - - if (b->max_size_bits > 0 && max_size_bits > b->max_size_bits) + if (max_size_bits > b->max_size_bits) max_size_bits = b->max_size_bits; return max_size_bits; @@ -300,7 +294,12 @@ wl_connection_set_max_buffer_size(struct wl_connection *connection, { uint32_t max_size_bits; - max_size_bits = get_max_size_bits_for_size(max_buffer_size); + /* Max buffer size 0 means allow buffers limited only by integer + * sizes or available memory, whichever runs out first. + */ + max_size_bits = max_buffer_size != 0 ? + get_max_size_bits_for_size(max_buffer_size) : + WL_BUFFER_MAX_SIZE_POT; connection->fds_in.max_size_bits = max_size_bits; ring_buffer_ensure_space(&connection->fds_in, 0);