You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2015/07/31 12:18:34 UTC
[3/5] celix git commit: CELIX-237: Some mem leak fixed based on
valgrind results
CELIX-237: Some mem leak fixed based on valgrind results
Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/195c83d0
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/195c83d0
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/195c83d0
Branch: refs/heads/feature/CELIX-237_rsa-ffi
Commit: 195c83d0747c7e13cd0ed4321f27fd2768fc3ee2
Parents: 794f797
Author: Pepijn Noltes <pe...@gmail.com>
Authored: Thu Jul 30 13:49:20 2015 +0200
Committer: Pepijn Noltes <pe...@gmail.com>
Committed: Thu Jul 30 13:49:20 2015 +0200
----------------------------------------------------------------------
remote_services/CMakeLists.txt | 12 +++++-----
.../dynamic_function_interface/dyn_common.c | 22 +++++++++++++++--
.../dynamic_function_interface/dyn_common.h | 11 ++++-----
.../dynamic_function_interface/dyn_interface.c | 25 +++++++-------------
.../dynamic_function_interface/dyn_interface.h | 10 ++------
.../tst/dyn_interface_tests.cpp | 5 ++++
6 files changed, 47 insertions(+), 38 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/celix/blob/195c83d0/remote_services/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/remote_services/CMakeLists.txt b/remote_services/CMakeLists.txt
index b7dc13c..957f468 100644
--- a/remote_services/CMakeLists.txt
+++ b/remote_services/CMakeLists.txt
@@ -33,14 +33,14 @@ if (REMOTE_SERVICE_ADMIN)
add_subdirectory(topology_manager)
- #add_subdirectory(remote_service_admin)
- #add_subdirectory(remote_service_admin_http)
- add_subdirectory(remote_service_admin_http_ffi)
- #add_subdirectory(remote_service_admin_shm)
+ add_subdirectory(remote_service_admin)
+ add_subdirectory(remote_service_admin_http)
+ #add_subdirectory(remote_service_admin_http_ffi)
+ add_subdirectory(remote_service_admin_shm)
- #add_subdirectory(discovery_configured)
+ add_subdirectory(discovery_configured)
add_subdirectory(discovery_etcd)
- #add_subdirectory(discovery_shm)
+ add_subdirectory(discovery_shm)
add_subdirectory(dynamic_function_interface)
http://git-wip-us.apache.org/repos/asf/celix/blob/195c83d0/remote_services/dynamic_function_interface/dyn_common.c
----------------------------------------------------------------------
diff --git a/remote_services/dynamic_function_interface/dyn_common.c b/remote_services/dynamic_function_interface/dyn_common.c
index 057ddcf..0cca69b 100644
--- a/remote_services/dynamic_function_interface/dyn_common.c
+++ b/remote_services/dynamic_function_interface/dyn_common.c
@@ -51,14 +51,15 @@ int dynCommon_parseNameAlsoAccept(FILE *stream, const char *acceptedChars, char
if (strLen == 0) {
status = ERROR;
LOG_ERROR("Parsed empty name");
- free(buf);
}
}
if (status == OK) {
LOG_DEBUG("Parsed name '%s'", buf);
*result = buf;
- }
+ } else if (buf != NULL) {
+ free(buf);
+ }
return status;
}
@@ -116,3 +117,20 @@ static bool dynCommon_charIn(int c, const char *acceptedChars) {
return status;
}
+
+void dynCommon_clearNamValHead(struct namvals_head *head) {
+ struct namval_entry *tmp = NULL;
+ struct namval_entry *entry = TAILQ_FIRST(head);
+ while (entry != NULL) {
+ tmp = entry;
+
+ if (entry->name != NULL) {
+ free(entry->name);
+ }
+ if (entry->value != NULL) {
+ free(entry->value);
+ }
+ entry = TAILQ_NEXT(entry, entries);
+ free(tmp);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/celix/blob/195c83d0/remote_services/dynamic_function_interface/dyn_common.h
----------------------------------------------------------------------
diff --git a/remote_services/dynamic_function_interface/dyn_common.h b/remote_services/dynamic_function_interface/dyn_common.h
index 308b75a..a31cbc4 100644
--- a/remote_services/dynamic_function_interface/dyn_common.h
+++ b/remote_services/dynamic_function_interface/dyn_common.h
@@ -14,20 +14,19 @@
//logging
DFI_SETUP_LOG_HEADER(dynCommon);
-/*
-typedef struct _dyn_annotation_list_type annotation_list_type;
-TAILQ_HEAD(_dyn_annotation_list_type, _dyn_annotation_type);
+TAILQ_HEAD(namvals_head, namval_entry);
-typedef struct _dyn_annotation_type dyn_annotation_type;
-struct _dyn_annotation_type {
+struct namval_entry {
char *name;
char *value;
+ TAILQ_ENTRY(namval_entry) entries;
};
-*/
int dynCommon_parseName(FILE *stream, char **result);
int dynCommon_parseNameAlsoAccept(FILE *stream, const char *acceptedChars, char **result);
int dynCommon_parseNameValue(FILE *stream, char **name, char **value);
int dynCommon_eatChar(FILE *stream, int c);
+void dynCommon_clearNamValHead(struct namvals_head *head);
+
#endif
http://git-wip-us.apache.org/repos/asf/celix/blob/195c83d0/remote_services/dynamic_function_interface/dyn_interface.c
----------------------------------------------------------------------
diff --git a/remote_services/dynamic_function_interface/dyn_interface.c b/remote_services/dynamic_function_interface/dyn_interface.c
index d411232..878cfea 100644
--- a/remote_services/dynamic_function_interface/dyn_interface.c
+++ b/remote_services/dynamic_function_interface/dyn_interface.c
@@ -110,18 +110,22 @@ static int dynInterface_parseSection(dyn_interface_type *intf, FILE *stream) {
if (status == OK) {
if (strcmp("header", sectionName) == 0) {
status = dynInterface_parseHeader(intf, stream);
- } else if (strcmp("annotations", sectionName) ==0) {
+ } else if (strcmp("annotations", sectionName) == 0) {
status = dynInterface_parseAnnotations(intf, stream);
} else if (strcmp("types", sectionName) == 0) {
- status =dynInterface_parseTypes(intf, stream);
+ status = dynInterface_parseTypes(intf, stream);
} else if (strcmp("methods", sectionName) == 0) {
- status =dynInterface_parseMethods(intf, stream);
+ status = dynInterface_parseMethods(intf, stream);
} else {
status = ERROR;
LOG_ERROR("unsupported section '%s'", sectionName);
}
}
+ if (sectionName != NULL) {
+ free(sectionName);
+ }
+
return status;
}
@@ -297,19 +301,8 @@ static int dynInterface_parseMethods(dyn_interface_type *intf, FILE *stream) {
void dynInterface_destroy(dyn_interface_type *intf) {
if (intf != NULL) {
- struct namval_entry *nTmp = NULL;
- struct namval_entry *nEntry = TAILQ_FIRST(&intf->annotations);
- while (nEntry != NULL) {
- nTmp = nEntry;
- nEntry = TAILQ_NEXT(nEntry, entries);
- if (nTmp->name != NULL) {
- free(nTmp->name);
- }
- if (nTmp->value != NULL) {
- free(nTmp->value);
- }
- free(nTmp);
- }
+ dynCommon_clearNamValHead(&intf->header);
+ dynCommon_clearNamValHead(&intf->annotations);
struct type_entry *tmp = NULL;
struct type_entry *tInfo = TAILQ_FIRST(&intf->types);
http://git-wip-us.apache.org/repos/asf/celix/blob/195c83d0/remote_services/dynamic_function_interface/dyn_interface.h
----------------------------------------------------------------------
diff --git a/remote_services/dynamic_function_interface/dyn_interface.h b/remote_services/dynamic_function_interface/dyn_interface.h
index 6b7f9ce..41f239f 100644
--- a/remote_services/dynamic_function_interface/dyn_interface.h
+++ b/remote_services/dynamic_function_interface/dyn_interface.h
@@ -4,6 +4,7 @@
#ifndef __DYN_INTERFACE_H_
#define __DYN_INTERFACE_H_
+#include "dyn_common.h"
#include "dyn_type.h"
#include "dyn_function.h"
#include "dfi_log_util.h"
@@ -22,7 +23,7 @@ DFI_SETUP_LOG_HEADER(dynInterface);
*
*/
-TAILQ_HEAD(namvals_head, namval_entry);
+//struct namvals_head in dyn_common.h
TAILQ_HEAD(methods_head, method_entry);
//struct reference_types_head in dyn_type.h
@@ -35,13 +36,6 @@ struct _dyn_interface_type {
struct methods_head methods;
};
-//TODO move to dynCommon
-struct namval_entry {
- char *name;
- char *value;
- TAILQ_ENTRY(namval_entry) entries;
-};
-
struct method_entry {
int index;
char *id;
http://git-wip-us.apache.org/repos/asf/celix/blob/195c83d0/remote_services/dynamic_function_interface/tst/dyn_interface_tests.cpp
----------------------------------------------------------------------
diff --git a/remote_services/dynamic_function_interface/tst/dyn_interface_tests.cpp b/remote_services/dynamic_function_interface/tst/dyn_interface_tests.cpp
index 18bdb33..f60cc50 100644
--- a/remote_services/dynamic_function_interface/tst/dyn_interface_tests.cpp
+++ b/remote_services/dynamic_function_interface/tst/dyn_interface_tests.cpp
@@ -51,6 +51,11 @@ extern "C" {
status = dynInterface_getAnnotationEntry(dynIntf, "classname", &annVal);
CHECK_EQUAL(0, status);
STRCMP_EQUAL("org.example.Calculator", annVal);
+
+ char *nonExist = NULL;
+ status = dynInterface_getHeaderEntry(dynIntf, "nonExisting", &nonExist);
+ CHECK(status != 0);
+ CHECK(nonExist == NULL);
dynInterface_destroy(dynIntf);
}