record->expiry,
GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE_RECORD);
GNUNET_SERVER_notification_context_unicast(nc, client, (struct GNUNET_MessageHeader *)srm, GNUNET_NO);
+ GNUNET_free(srm);
return GNUNET_YES;
}
GNUNET_MESSAGE_TYPE_PEERSTORE_WATCH_RECORD);
GNUNET_SERVER_notification_context_unicast(nc, client,
(const struct GNUNET_MessageHeader *)srm, GNUNET_NO);
+ GNUNET_free(srm);
return GNUNET_YES;
}
endmsg->size = htons(sizeof(struct GNUNET_MessageHeader));
endmsg->type = htons(GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE_END);
GNUNET_SERVER_notification_context_unicast(nc, client, endmsg, GNUNET_NO);
+ GNUNET_free(endmsg);
+ GNUNET_SERVER_receive_done(client, GNUNET_OK);
}
else
{
GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
}
- GNUNET_free(record); /* FIXME: destroy record */
+ PEERSTORE_destroy_record(record);
}
/**
|| NULL == record->peer
|| NULL == record->key)
{
- /* FIXME: Destroy record */
GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Full key not supplied in client store request\n");
+ PEERSTORE_destroy_record(record);
GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
return;
}
record->value_size,
*record->expiry))
{
- /* FIXME: Destroy record */
GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to store requested value, sqlite database error.");
+ PEERSTORE_destroy_record(record);
GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
return;
}
GNUNET_SERVER_receive_done(client, GNUNET_OK);
watch_notifier(record);
+ PEERSTORE_destroy_record(record);
}
/**
return record;
}
+
+/**
+ * Free any memory allocated for this record
+ *
+ * @param record
+ */
+void PEERSTORE_destroy_record(struct GNUNET_PEERSTORE_Record *record)
+{
+ if(NULL != record->sub_system)
+ GNUNET_free(record->sub_system);
+ if(NULL != record->peer)
+ GNUNET_free(record->peer);
+ if(NULL != record->key)
+ GNUNET_free(record->key);
+ if(NULL != record->value)
+ {
+ GNUNET_free(record->value);
+ record->value = 0;
+ }
+ if(NULL != record->expiry)
+ GNUNET_free(record->expiry);
+ GNUNET_free(record);
+}