summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
c117e98)
Coverity finds that dlopen_ust leaks handles. Modify the code structure
to keep track of those handles in library descriptors so they are not
leaked.
*** CID
1453155: (RESOURCE_LEAK)
/tests/regression/abi0-conflict/app_ust_dlopen.c: 35 in dlopen_ust()
29 printf("Error: dlopen of liblttng-ust shared library (%s).\n", lib_soname);
30 ret = EXIT_FAILURE;
31 } else {
32 printf("Success: dlopen of liblttng-ust shared library (%s).\n", lib_soname);
33 }
34
>>> CID
1453155: (RESOURCE_LEAK)
>>> Variable "handle" going out of scope leaks the storage it points to.
35 return ret;
36 }
37
38 static
39 int dlopen_abi0(void)
40 {
/tests/regression/abi0-conflict/app_noust_dlopen.c: 31 in dlopen_ust()
25 printf("Error: dlopen of liblttng-ust shared library (%s).\n", lib_soname);
26 ret = EXIT_FAILURE;
27 } else {
28 printf("Success: dlopen of liblttng-ust shared library (%s).\n", lib_soname);
29 }
30
>>> CID
1453155: (RESOURCE_LEAK)
>>> Variable "handle" going out of scope leaks the storage it points to.
31 return ret;
32 }
33
34 static
35 int dlopen_abi0(void)
36 {
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I967c2e8741c6d42c0c12e19fbadc81e1c91d1e0f
#define LTTNG_UST_LIB_ABI0_SO_NAME "libfakeust0.so"
#define LTTNG_UST_LIB_ABI1_SO_NAME "liblttng-ust.so.1"
#define LTTNG_UST_LIB_ABI0_SO_NAME "libfakeust0.so"
#define LTTNG_UST_LIB_ABI1_SO_NAME "liblttng-ust.so.1"
+struct lib_desc {
+ const char *soname;
+ void *handle;
+};
+
+static struct lib_desc lib_desc[] = {
+ [0] = {
+ .soname = LTTNG_UST_LIB_ABI0_SO_NAME,
+ },
+ [1] = {
+ .soname = LTTNG_UST_LIB_ABI1_SO_NAME,
+ },
+ [2] = {
+ .soname = LTTNG_UST_LIB_ABI1_SO_NAME,
+ },
+};
+
-int dlopen_ust(const char *lib_soname)
+int dlopen_ust(struct lib_desc *desc)
{
int ret = EXIT_SUCCESS;
{
int ret = EXIT_SUCCESS;
- handle = dlopen(lib_soname, RTLD_NOW | RTLD_GLOBAL);
- if (!handle) {
- printf("Error: dlopen of liblttng-ust shared library (%s).\n", lib_soname);
+ desc->handle = dlopen(desc->soname, RTLD_NOW | RTLD_GLOBAL);
+ if (!desc->handle) {
+ printf("Error: dlopen of liblttng-ust shared library (%s).\n", desc->soname);
ret = EXIT_FAILURE;
} else {
ret = EXIT_FAILURE;
} else {
- printf("Success: dlopen of liblttng-ust shared library (%s).\n", lib_soname);
+ printf("Success: dlopen of liblttng-ust shared library (%s).\n", desc->soname);
static
int dlopen_abi0(void)
{
static
int dlopen_abi0(void)
{
- return dlopen_ust(LTTNG_UST_LIB_ABI0_SO_NAME);
+ return dlopen_ust(&lib_desc[0]);
}
static
int dlopen_abi1(void)
{
}
static
int dlopen_abi1(void)
{
- return dlopen_ust(LTTNG_UST_LIB_ABI1_SO_NAME);
+ return dlopen_ust(&lib_desc[1]);
{
int ret = EXIT_SUCCESS;
{
int ret = EXIT_SUCCESS;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI0_SO_NAME);
+ ret = dlopen_ust(&lib_desc[0]);
if (ret != EXIT_SUCCESS)
return ret;
if (ret != EXIT_SUCCESS)
return ret;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI1_SO_NAME);
+ ret = dlopen_ust(&lib_desc[1]);
{
int ret = EXIT_SUCCESS;
{
int ret = EXIT_SUCCESS;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI1_SO_NAME);
+ ret = dlopen_ust(&lib_desc[1]);
if (ret != EXIT_SUCCESS)
return ret;
if (ret != EXIT_SUCCESS)
return ret;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI0_SO_NAME);
+ ret = dlopen_ust(&lib_desc[0]);
{
int ret = EXIT_SUCCESS;
{
int ret = EXIT_SUCCESS;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI1_SO_NAME);
+ ret = dlopen_ust(&lib_desc[1]);
if (ret != EXIT_SUCCESS)
return ret;
if (ret != EXIT_SUCCESS)
return ret;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI1_SO_NAME);
+ ret = dlopen_ust(&lib_desc[2]);
#define LTTNG_UST_LIB_ABI0_SO_NAME "libfakeust0.so"
#define LTTNG_UST_LIB_ABI1_SO_NAME "liblttng-ust.so.1"
#define LTTNG_UST_LIB_ABI0_SO_NAME "libfakeust0.so"
#define LTTNG_UST_LIB_ABI1_SO_NAME "liblttng-ust.so.1"
+struct lib_desc {
+ const char *soname;
+ void *handle;
+};
+
+static struct lib_desc lib_desc[] = {
+ [0] = {
+ .soname = LTTNG_UST_LIB_ABI0_SO_NAME,
+ },
+ [1] = {
+ .soname = LTTNG_UST_LIB_ABI1_SO_NAME,
+ },
+ [2] = {
+ .soname = LTTNG_UST_LIB_ABI1_SO_NAME,
+ },
+};
+
-int dlopen_ust(const char *lib_soname)
+int dlopen_ust(struct lib_desc *desc)
{
int ret = EXIT_SUCCESS;
{
int ret = EXIT_SUCCESS;
- handle = dlopen(lib_soname, RTLD_NOW | RTLD_GLOBAL);
- if (!handle) {
- printf("Error: dlopen of liblttng-ust shared library (%s).\n", lib_soname);
+ desc->handle = dlopen(desc->soname, RTLD_NOW | RTLD_GLOBAL);
+ if (!desc->handle) {
+ printf("Error: dlopen of liblttng-ust shared library (%s).\n", desc->soname);
ret = EXIT_FAILURE;
} else {
ret = EXIT_FAILURE;
} else {
- printf("Success: dlopen of liblttng-ust shared library (%s).\n", lib_soname);
+ printf("Success: dlopen of liblttng-ust shared library (%s).\n", desc->soname);
static
int dlopen_abi0(void)
{
static
int dlopen_abi0(void)
{
- return dlopen_ust(LTTNG_UST_LIB_ABI0_SO_NAME);
+ return dlopen_ust(&lib_desc[0]);
}
static
int dlopen_abi1(void)
{
}
static
int dlopen_abi1(void)
{
- return dlopen_ust(LTTNG_UST_LIB_ABI1_SO_NAME);
+ return dlopen_ust(&lib_desc[1]);
{
int ret = EXIT_SUCCESS;
{
int ret = EXIT_SUCCESS;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI0_SO_NAME);
+ ret = dlopen_ust(&lib_desc[0]);
if (ret != EXIT_SUCCESS)
return ret;
if (ret != EXIT_SUCCESS)
return ret;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI1_SO_NAME);
+ ret = dlopen_ust(&lib_desc[1]);
{
int ret = EXIT_SUCCESS;
{
int ret = EXIT_SUCCESS;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI1_SO_NAME);
+ ret = dlopen_ust(&lib_desc[1]);
if (ret != EXIT_SUCCESS)
return ret;
if (ret != EXIT_SUCCESS)
return ret;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI0_SO_NAME);
+ ret = dlopen_ust(&lib_desc[0]);
{
int ret = EXIT_SUCCESS;
{
int ret = EXIT_SUCCESS;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI1_SO_NAME);
+ ret = dlopen_ust(&lib_desc[1]);
if (ret != EXIT_SUCCESS)
return ret;
if (ret != EXIT_SUCCESS)
return ret;
- ret = dlopen_ust(LTTNG_UST_LIB_ABI1_SO_NAME);
+ ret = dlopen_ust(&lib_desc[2]);
{
int ret = EXIT_SUCCESS;
const char *test_type;
{
int ret = EXIT_SUCCESS;
const char *test_type;
int i, netint;
long values[] = { 1, 2, 3 };
char text[10] = "test";
int i, netint;
long values[] = { 1, 2, 3 };
char text[10] = "test";
float flt = 2222.0;
bool mybool = 123; /* should print "1" */
float flt = 2222.0;
bool mybool = 123; /* should print "1" */
if (argc != 2) {
usage(argv);
return EXIT_FAILURE;
if (argc != 2) {
usage(argv);
return EXIT_FAILURE;