- pool_get (sm->segments, s);
- memset (s, 0, sizeof (*s));
-
- s->ssvm.ssvm_size = rnd_size;
- s->ssvm.i_am_master = 1;
- s->ssvm.my_pid = getpid ();
- s->ssvm.name = format (0, "%s%c", a->segment_name, 0);
- s->ssvm.requested_va = ~0;
-
- /* Allocate a [sic] shared memory header, in process memory... */
- sh = clib_mem_alloc_aligned (sizeof (*sh), CLIB_CACHE_LINE_BYTES);
- s->ssvm.sh = sh;
-
- memset (sh, 0, sizeof (*sh));
- sh->heap = a->private_segment_count ? heaps[i] : clib_mem_get_heap ();
-
- /* Set up svm_fifo_segment shared header */
- fsh = clib_mem_alloc (sizeof (*fsh));
- memset (fsh, 0, sizeof (*fsh));
- sh->opaque[0] = fsh;
- s->h = fsh;
- fsh->flags = FIFO_SEGMENT_F_IS_PRIVATE;
- if (!a->private_segment_count)
- fsh->flags |= FIFO_SEGMENT_F_IS_MAIN_HEAP;
- fsh->segment_name = format (0, "%s%c", a->segment_name, 0);
-
- if (a->private_segment_count)
- {
- oldheap = clib_mem_get_heap ();
- clib_mem_set_heap (sh->heap);
- preallocate_fifo_pairs (fsh, a);
- clib_mem_set_heap (oldheap);
- }
- sh->ready = 1;
- vec_add1 (a->new_segment_indices, s - sm->segments);