aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-light/src/hicn/core/forwarder.c
diff options
context:
space:
mode:
authorJordan Augé <jordan.auge@cisco.com>2019-10-28 15:44:42 +0100
committerMauro Sardara <msardara@cisco.com>2019-10-30 14:46:57 +0000
commit5fca7ef4838c6a8aede8a5e338940804e8e363f7 (patch)
tree341257400aaa3dd428340418a2c1a808bdbbb01c /hicn-light/src/hicn/core/forwarder.c
parent3d674d504306489c4d845260f058ce44aa083f33 (diff)
[HICN-363] Fix memory leaks
Change-Id: I7617becdb520f20caca341be11fbb8c1054de021 Signed-off-by: Jordan Augé <jordan.auge@cisco.com>
Diffstat (limited to 'hicn-light/src/hicn/core/forwarder.c')
-rw-r--r--hicn-light/src/hicn/core/forwarder.c62
1 files changed, 52 insertions, 10 deletions
diff --git a/hicn-light/src/hicn/core/forwarder.c b/hicn-light/src/hicn/core/forwarder.c
index c9527bb49..66551b0ec 100644
--- a/hicn-light/src/hicn/core/forwarder.c
+++ b/hicn-light/src/hicn/core/forwarder.c
@@ -52,7 +52,7 @@
#include <hicn/core/forwarder.h>
#include <hicn/core/messagePacketType.h>
#ifdef WITH_MAPME
-#include <hicn/core/mapMe.h>
+#include <hicn/core/mapme.h>
#endif /* WITH_MAPME */
#include <hicn/config/configuration.h>
#include <hicn/config/configurationFile.h>
@@ -197,10 +197,19 @@ Forwarder *forwarder_Create(Logger *logger) {
dispatcher_StartSignalEvent(forwarder->dispatcher, forwarder->signal_usr1);
#endif
-#if !defined(__APPLE__) && !defined(_WIN32) && defined(PUNTING)
+#if !defined(__APPLE__) && !defined(__ANDROID__) && !defined(_WIN32) && \
+ defined(PUNTING)
forwarder->hicnSocketHelper = hicn_create();
- if (forwarder->hicnSocketHelper == NULL) return NULL;
+ if (!forwarder->hicnSocketHelper)
+ goto ERR_SOCKET;
#endif /* __APPLE__ */
+
+#ifdef WITH_MAPME
+ if (!(mapme_create(&forwarder->mapme, forwarder)))
+ goto ERR_MAPME;
+#endif /* WITH_MAPME */
+
+
/* ignore child */
#ifndef _WIN32
signal(SIGCHLD, SIG_IGN);
@@ -220,10 +229,6 @@ Forwarder *forwarder_Create(Logger *logger) {
wtnow_timeout.tv_sec = 0;
wtnow_timeout.tv_usec = 50000; // 20 Hz keepalive
-#ifdef WITH_MAPME
- if (!(mapMe_Init(&forwarder->mapme, forwarder))) return NULL;
-#endif /* WITH_MAPME */
-
PARCEventScheduler *base =
dispatcher_GetEventScheduler(forwarder->dispatcher);
forwarder->keepalive_event = parcEventTimer_Create(
@@ -231,6 +236,39 @@ Forwarder *forwarder_Create(Logger *logger) {
parcEventTimer_Start(forwarder->keepalive_event, &wtnow_timeout);
return forwarder;
+
+#ifdef WITH_MAPME
+ERR_MAPME:
+#endif /* WITH_MAPME */
+#if !defined(__APPLE__) && !defined(__ANDROID__) && !defined(_WIN32) && \
+ defined(PUNTING)
+ hicn_free(forwarder->hicnSocketHelper);
+ERR_SOCKET:
+#endif
+ listenerSet_Destroy(&(forwarder->listenerSet));
+ connectionManager_Destroy(&(forwarder->connectionManager));
+ connectionTable_Destroy(&(forwarder->connectionTable));
+ messageProcessor_Destroy(&(forwarder->processor));
+ configuration_Destroy(&(forwarder->config));
+ messenger_Destroy(&(forwarder->messenger));
+
+ dispatcher_DestroySignalEvent(forwarder->dispatcher,
+ &(forwarder->signal_int));
+ dispatcher_DestroySignalEvent(forwarder->dispatcher,
+ &(forwarder->signal_term));
+#ifndef _WIN32
+ dispatcher_DestroySignalEvent(forwarder->dispatcher,
+ &(forwarder->signal_usr1));
+#endif
+
+ parcClock_Release(&forwarder->clock);
+ logger_Release(&forwarder->logger);
+
+ // do the dispatcher last
+ dispatcher_Destroy(&(forwarder->dispatcher));
+
+ parcMemory_Deallocate((void **)&forwarder);
+ return NULL;
}
void forwarder_Destroy(Forwarder **ptr) {
@@ -239,7 +277,7 @@ void forwarder_Destroy(Forwarder **ptr) {
Forwarder *forwarder = *ptr;
#if !defined(__APPLE__) && !defined(__ANDROID__) && !defined(_WIN32) && \
defined(PUNTING)
- hicn_destroy();
+ hicn_free(forwarder->hicnSocketHelper);
#endif
parcEventTimer_Destroy(&(forwarder->keepalive_event));
@@ -252,6 +290,10 @@ void forwarder_Destroy(Forwarder **ptr) {
// the messenger is used by many of the other pieces, so destroy it last
messenger_Destroy(&(forwarder->messenger));
+#ifdef WITH_MAPME
+ mapme_free(forwarder->mapme);
+#endif /* WITH_MAPME */
+
dispatcher_DestroySignalEvent(forwarder->dispatcher,
&(forwarder->signal_int));
dispatcher_DestroySignalEvent(forwarder->dispatcher,
@@ -532,13 +574,13 @@ void forwarder_onConnectionEvent(Forwarder *forwarder, const Connection *conn, c
#ifdef WITH_POLICY
messageProcessor_onConnectionEvent(forwarder->processor, conn, event);
#else
- mapMe_onConnectionEvent(forwarder->mapme, conn, event);
+ mapme_onConnectionEvent(forwarder->mapme, conn, event);
#endif /* WITH_POLICY */
}
void forwarder_ProcessMapMe(Forwarder *forwarder, const uint8_t *msgBuffer,
unsigned conn_id) {
- mapMe_Process(forwarder->mapme, msgBuffer, conn_id);
+ mapme_Process(forwarder->mapme, msgBuffer, conn_id);
}
MapMe *