hash_pair_t *hp;
/* Must be called in the context of the main heap */
- ASSERT (clib_mem_get_heap != sm->heap);
+ ASSERT (clib_mem_get_heap () != sm->heap);
hp = hash_get_pair (sm->directory_vector_by_name, name);
if (!hp)
{
- hash_set (sm->directory_vector_by_name, name, next_vector_index);
+ /* we allocate our private copy of 'name' */
+ hash_set (sm->directory_vector_by_name, format (0, "%s%c", name, 0),
+ next_vector_index);
index = next_vector_index;
}
else
shared_header->directory_offset =
stat_segment_offset (shared_header, sm->directory_vector);
}
- else
- {
- vec_free (name);
- }
vlib_stat_segment_unlock ();
}
return 0;
}
-static void
+static clib_error_t *
stats_segment_socket_init (void)
{
stat_segment_main_t *sm = &stat_segment_main;
CLIB_SOCKET_F_ALLOW_GROUP_WRITE | CLIB_SOCKET_F_PASSCRED;
if ((error = clib_socket_init (s)))
- {
- clib_error_report (error);
- return;
- }
+ return error;
clib_file_t template = { 0 };
template.read_function = stats_socket_accept_ready;
clib_file_add (&file_main, &template);
sm->socket = s;
+
+ return 0;
}
static clib_error_t *
{
stat_segment_main_t *sm = &stat_segment_main;
- if (sm->socket_name)
- stats_segment_socket_init ();
-
- return 0;
+ /* set default socket file name when statseg config stanza is empty. */
+ if (!vec_len (sm->socket_name))
+ sm->socket_name = format (0, "%s/%s", vlib_unix_get_runtime_dir (),
+ STAT_SEGMENT_SOCKET_FILENAME);
+ return stats_segment_socket_init ();
}
/* *INDENT-OFF* */
{
if (unformat (input, "socket-name %s", &sm->socket_name))
;
+ /* DEPRECATE: default (does nothing) */
else if (unformat (input, "default"))
- {
- vec_reset_length (sm->socket_name);
- sm->socket_name = format (sm->socket_name, "%s",
- STAT_SEGMENT_SOCKET_FILE);
- }
+ ;
else if (unformat (input, "size %U",
unformat_memory_size, &sm->memory_size))
;
format_unformat_error, input);
}
- /* set default socket file name when statseg config stanza is empty. */
- if (!vec_len (sm->socket_name))
- sm->socket_name = format (sm->socket_name, "%s",
- STAT_SEGMENT_SOCKET_FILE);
/*
* NULL-terminate socket name string
* clib_socket_init()->socket_config() use C str*
*/
- vec_terminate_c_string (sm->socket_name);
+ if (vec_len (sm->socket_name))
+ vec_terminate_c_string (sm->socket_name);
return 0;
}