ms = talloc_zero(ctx, fr_message_set_t);
if (!ms) {
- nomem:
fr_strerror_printf("Failed allocating memory");
return NULL;
}
ms->rb_array[0] = fr_ring_buffer_create(ms, ring_buffer_size);
if (!ms->rb_array[0]) {
talloc_free(ms);
- goto nomem;
+ return NULL;
}
ms->rb_max = 0;
ms->mr_array[0] = fr_ring_buffer_create(ms, num_messages * message_size);
if (!ms->mr_array[0]) {
talloc_free(ms);
- goto nomem;
+ return NULL;
}
ms->max_allocation = ring_buffer_size / 2;
*/
static void fr_network_directory_callback(void *ctx, void const *data, size_t data_size, UNUSED fr_time_t now)
{
+ int num_messages;
fr_network_t *nr = ctx;
fr_network_socket_t *s;
fr_app_io_t const *app_io;
/*
* Allocate the ring buffer for messages and packets.
*/
- s->ms = fr_message_set_create(s, s->listen->num_messages,
+ num_messages = s->listen->num_messages;
+ if (num_messages < 8) num_messages = 8;
+
+ s->ms = fr_message_set_create(s, num_messages,
sizeof(fr_channel_data_t),
s->listen->default_message_size * s->listen->num_messages);
if (!s->ms) {
- fr_log(nr->log, L_ERR, "Failed creating message buffers for directory IO. Closing socket.");
+ fr_log(nr->log, L_ERR, "Failed creating message buffers for directory IO: %s", fr_strerror());
talloc_free(s);
return;
}
return NULL;
}
- if (size < 1024) {
- fr_strerror_printf("Ring buffer size must be at least 1024");
- return NULL;
- }
+ if (size < 1024) size = 1024;
if (size > (1 << 30)) {
fr_strerror_printf("Ring buffer size must be no more than (1 << 30)");