env: add spdk_env_fini()
The function now has to be called before application exit. At the moment it only frees the dynamically allocated DPDK command line option strings - something that was previously done from an atexit() callback - but there's more to free there. Note: the function descriptions were partially copied from equivalent DPDK functions. Change-Id: I5f4a6607fdfadff9325917259f58fcbc2cedba1a Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/447676 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
6f48bf7cb6
commit
f373369a9c
@ -61,6 +61,12 @@ For retrieving physical addresses, spdk_vtophys() should be used instead.
|
|||||||
|
|
||||||
Dropped support for DPDK 17.07 and earlier, which SPDK won't even compile with right now.
|
Dropped support for DPDK 17.07 and earlier, which SPDK won't even compile with right now.
|
||||||
|
|
||||||
|
### env
|
||||||
|
|
||||||
|
spdk_env_fini() and spdk_env_dpdk_post_fini() were added to release any resources
|
||||||
|
allocated by spdk_env_init() or spdk_env_dpdk_post_init() respectively. It is expected
|
||||||
|
that common usage of those functions is to call them just before terminating the process.
|
||||||
|
|
||||||
## v19.01:
|
## v19.01:
|
||||||
|
|
||||||
### ocf bdev
|
### ocf bdev
|
||||||
|
@ -168,6 +168,14 @@ void spdk_env_opts_init(struct spdk_env_opts *opts);
|
|||||||
*/
|
*/
|
||||||
int spdk_env_init(const struct spdk_env_opts *opts);
|
int spdk_env_init(const struct spdk_env_opts *opts);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Release any resources of the environment library that were alllocated with
|
||||||
|
* spdk_env_init(). After this call, no SPDK env function calls may be made.
|
||||||
|
* It is expected that common usage of this function is to call it just before
|
||||||
|
* terminating the process.
|
||||||
|
*/
|
||||||
|
void spdk_env_fini(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocate a pinned memory buffer with the given size and alignment.
|
* Allocate a pinned memory buffer with the given size and alignment.
|
||||||
*
|
*
|
||||||
|
@ -52,6 +52,14 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
int spdk_env_dpdk_post_init(void);
|
int spdk_env_dpdk_post_init(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Release any resources of the environment library that were alllocated with
|
||||||
|
* spdk_env_dpdk_post_init(). After this call, no DPDK function calls may
|
||||||
|
* be made. It is expected that common usage of this function is to call it
|
||||||
|
* just before terminating the process.
|
||||||
|
*/
|
||||||
|
void spdk_env_dpdk_post_fini(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if DPDK was initialized external to the SPDK env_dpdk library.
|
* Check if DPDK was initialized external to the SPDK env_dpdk library.
|
||||||
*
|
*
|
||||||
|
@ -174,13 +174,6 @@ spdk_push_arg(char *args[], int *argcount, char *arg)
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
spdk_destruct_eal_cmdline(void)
|
|
||||||
{
|
|
||||||
spdk_free_args(g_eal_cmdline, g_eal_cmdline_argcount);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
spdk_build_eal_cmdline(const struct spdk_env_opts *opts)
|
spdk_build_eal_cmdline(const struct spdk_env_opts *opts)
|
||||||
{
|
{
|
||||||
@ -365,10 +358,6 @@ spdk_build_eal_cmdline(const struct spdk_env_opts *opts)
|
|||||||
|
|
||||||
g_eal_cmdline = args;
|
g_eal_cmdline = args;
|
||||||
g_eal_cmdline_argcount = argcount;
|
g_eal_cmdline_argcount = argcount;
|
||||||
if (atexit(spdk_destruct_eal_cmdline) != 0) {
|
|
||||||
fprintf(stderr, "Failed to register cleanup handler\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return argcount;
|
return argcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,6 +378,12 @@ spdk_env_dpdk_post_init(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
spdk_env_dpdk_post_fini(void)
|
||||||
|
{
|
||||||
|
spdk_free_args(g_eal_cmdline, g_eal_cmdline_argcount);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
spdk_env_init(const struct spdk_env_opts *opts)
|
spdk_env_init(const struct spdk_env_opts *opts)
|
||||||
{
|
{
|
||||||
@ -449,6 +444,12 @@ spdk_env_init(const struct spdk_env_opts *opts)
|
|||||||
return spdk_env_dpdk_post_init();
|
return spdk_env_dpdk_post_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
spdk_env_fini(void)
|
||||||
|
{
|
||||||
|
spdk_env_dpdk_post_fini();
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
spdk_env_dpdk_external_init(void)
|
spdk_env_dpdk_external_init(void)
|
||||||
{
|
{
|
||||||
|
@ -696,6 +696,7 @@ spdk_app_fini(void)
|
|||||||
{
|
{
|
||||||
spdk_trace_cleanup();
|
spdk_trace_cleanup();
|
||||||
spdk_reactors_fini();
|
spdk_reactors_fini();
|
||||||
|
spdk_env_fini();
|
||||||
spdk_conf_free(g_spdk_app.config);
|
spdk_conf_free(g_spdk_app.config);
|
||||||
spdk_log_close();
|
spdk_log_close();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user