aboutsummaryrefslogtreecommitdiff
path: root/src/peerstore
diff options
context:
space:
mode:
authorOmar Tarabai <tarabai@devegypt.com>2014-06-03 15:03:36 +0000
committerOmar Tarabai <tarabai@devegypt.com>2014-06-03 15:03:36 +0000
commit1d644b000a0f0b5c12fe82a6c95d4874081b69a5 (patch)
treee7cf26af12f45392b6f0a79d6012f16f1b6fd605 /src/peerstore
parenta04d70028c0615e7910f68328db9c61bba67128b (diff)
downloadgnunet-1d644b000a0f0b5c12fe82a6c95d4874081b69a5.tar.gz
gnunet-1d644b000a0f0b5c12fe82a6c95d4874081b69a5.zip
peerstore: memory leak fixes
Diffstat (limited to 'src/peerstore')
-rw-r--r--src/peerstore/gnunet-service-peerstore.c11
-rw-r--r--src/peerstore/peerstore_common.c23
-rw-r--r--src/peerstore/peerstore_common.h7
-rw-r--r--src/peerstore/plugin_peerstore_sqlite.c2
4 files changed, 40 insertions, 3 deletions
diff --git a/src/peerstore/gnunet-service-peerstore.c b/src/peerstore/gnunet-service-peerstore.c
index 82961f685..febebc63a 100644
--- a/src/peerstore/gnunet-service-peerstore.c
+++ b/src/peerstore/gnunet-service-peerstore.c
@@ -155,6 +155,7 @@ int record_iterator(void *cls,
155 record->expiry, 155 record->expiry,
156 GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE_RECORD); 156 GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE_RECORD);
157 GNUNET_SERVER_notification_context_unicast(nc, client, (struct GNUNET_MessageHeader *)srm, GNUNET_NO); 157 GNUNET_SERVER_notification_context_unicast(nc, client, (struct GNUNET_MessageHeader *)srm, GNUNET_NO);
158 GNUNET_free(srm);
158 return GNUNET_YES; 159 return GNUNET_YES;
159} 160}
160 161
@@ -190,6 +191,7 @@ int watch_notifier_it(void *cls,
190 GNUNET_MESSAGE_TYPE_PEERSTORE_WATCH_RECORD); 191 GNUNET_MESSAGE_TYPE_PEERSTORE_WATCH_RECORD);
191 GNUNET_SERVER_notification_context_unicast(nc, client, 192 GNUNET_SERVER_notification_context_unicast(nc, client,
192 (const struct GNUNET_MessageHeader *)srm, GNUNET_NO); 193 (const struct GNUNET_MessageHeader *)srm, GNUNET_NO);
194 GNUNET_free(srm);
193 return GNUNET_YES; 195 return GNUNET_YES;
194} 196}
195 197
@@ -291,12 +293,14 @@ void handle_iterate (void *cls,
291 endmsg->size = htons(sizeof(struct GNUNET_MessageHeader)); 293 endmsg->size = htons(sizeof(struct GNUNET_MessageHeader));
292 endmsg->type = htons(GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE_END); 294 endmsg->type = htons(GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE_END);
293 GNUNET_SERVER_notification_context_unicast(nc, client, endmsg, GNUNET_NO); 295 GNUNET_SERVER_notification_context_unicast(nc, client, endmsg, GNUNET_NO);
296 GNUNET_free(endmsg);
297 GNUNET_SERVER_receive_done(client, GNUNET_OK);
294 } 298 }
295 else 299 else
296 { 300 {
297 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR); 301 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
298 } 302 }
299 GNUNET_free(record); /* FIXME: destroy record */ 303 PEERSTORE_destroy_record(record);
300} 304}
301 305
302/** 306/**
@@ -323,8 +327,8 @@ void handle_store (void *cls,
323 || NULL == record->peer 327 || NULL == record->peer
324 || NULL == record->key) 328 || NULL == record->key)
325 { 329 {
326 /* FIXME: Destroy record */
327 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Full key not supplied in client store request\n"); 330 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Full key not supplied in client store request\n");
331 PEERSTORE_destroy_record(record);
328 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR); 332 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
329 return; 333 return;
330 } 334 }
@@ -341,13 +345,14 @@ void handle_store (void *cls,
341 record->value_size, 345 record->value_size,
342 *record->expiry)) 346 *record->expiry))
343 { 347 {
344 /* FIXME: Destroy record */
345 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to store requested value, sqlite database error."); 348 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to store requested value, sqlite database error.");
349 PEERSTORE_destroy_record(record);
346 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR); 350 GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
347 return; 351 return;
348 } 352 }
349 GNUNET_SERVER_receive_done(client, GNUNET_OK); 353 GNUNET_SERVER_receive_done(client, GNUNET_OK);
350 watch_notifier(record); 354 watch_notifier(record);
355 PEERSTORE_destroy_record(record);
351} 356}
352 357
353/** 358/**
diff --git a/src/peerstore/peerstore_common.c b/src/peerstore/peerstore_common.c
index 2b62abf19..eeaa3144c 100644
--- a/src/peerstore/peerstore_common.c
+++ b/src/peerstore/peerstore_common.c
@@ -233,3 +233,26 @@ PEERSTORE_parse_record_message(const struct GNUNET_MessageHeader *message)
233 233
234 return record; 234 return record;
235} 235}
236
237/**
238 * Free any memory allocated for this record
239 *
240 * @param record
241 */
242void PEERSTORE_destroy_record(struct GNUNET_PEERSTORE_Record *record)
243{
244 if(NULL != record->sub_system)
245 GNUNET_free(record->sub_system);
246 if(NULL != record->peer)
247 GNUNET_free(record->peer);
248 if(NULL != record->key)
249 GNUNET_free(record->key);
250 if(NULL != record->value)
251 {
252 GNUNET_free(record->value);
253 record->value = 0;
254 }
255 if(NULL != record->expiry)
256 GNUNET_free(record->expiry);
257 GNUNET_free(record);
258}
diff --git a/src/peerstore/peerstore_common.h b/src/peerstore/peerstore_common.h
index 20cb9c0e7..dae2b437b 100644
--- a/src/peerstore/peerstore_common.h
+++ b/src/peerstore/peerstore_common.h
@@ -86,3 +86,10 @@ PEERSTORE_create_record_mq_envelope(const char *sub_system,
86 */ 86 */
87struct GNUNET_PEERSTORE_Record * 87struct GNUNET_PEERSTORE_Record *
88PEERSTORE_parse_record_message(const struct GNUNET_MessageHeader *message); 88PEERSTORE_parse_record_message(const struct GNUNET_MessageHeader *message);
89
90/**
91 * Free any memory allocated for this record
92 *
93 * @param record
94 */
95void PEERSTORE_destroy_record(struct GNUNET_PEERSTORE_Record *record);
diff --git a/src/peerstore/plugin_peerstore_sqlite.c b/src/peerstore/plugin_peerstore_sqlite.c
index 8d35466de..8705ce188 100644
--- a/src/peerstore/plugin_peerstore_sqlite.c
+++ b/src/peerstore/plugin_peerstore_sqlite.c
@@ -215,6 +215,8 @@ peerstore_sqlite_iterate_records (void *cls,
215 iter (iter_cls, 215 iter (iter_cls,
216 ret, 216 ret,
217 NULL); 217 NULL);
218 GNUNET_free(ret->expiry);
219 GNUNET_free(ret);
218 } 220 }
219 if (SQLITE_DONE != sret) 221 if (SQLITE_DONE != sret)
220 { 222 {