+static fifo_segment_t *
+find_max_free_segment (segment_manager_t * sm, u32 thread_index)
+{
+ fifo_segment_t *cur, *fs = 0;
+ uword free_bytes, max_free_bytes = 0;
+
+ clib_rwlock_reader_lock (&sm->segments_rwlock);
+ /* *INDENT-OFF* */
+ pool_foreach (cur, sm->segments, ({
+ if ((free_bytes = fifo_segment_free_bytes (cur)) > max_free_bytes)
+ {
+ max_free_bytes = free_bytes;
+ fs = cur;
+ }
+ }));
+ /* *INDENT-ON* */
+ clib_rwlock_reader_unlock (&sm->segments_rwlock);
+
+ return fs;
+}
+