You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by bp...@apache.org on 2015/01/29 20:27:58 UTC
svn commit: r1655823 - /celix/trunk/log_service/private/src/log.c
Author: bpetri
Date: Thu Jan 29 19:27:57 2015
New Revision: 1655823
URL: http://svn.apache.org/r1655823
Log:
fixed mem leak
Modified:
celix/trunk/log_service/private/src/log.c
Modified: celix/trunk/log_service/private/src/log.c
URL: http://svn.apache.org/viewvc/celix/trunk/log_service/private/src/log.c?rev=1655823&r1=1655822&r2=1655823&view=diff
==============================================================================
--- celix/trunk/log_service/private/src/log.c (original)
+++ celix/trunk/log_service/private/src/log.c Thu Jan 29 19:27:57 2015
@@ -98,15 +98,26 @@ celix_status_t log_destroy(log_pt logger
celixThreadMutex_destroy(&logger->deliverLock);
celixThreadCondition_destroy(&logger->entriesToDeliver);
- arrayList_destroy(logger->listenerEntries);
arrayList_destroy(logger->listeners);
linked_list_iterator_pt iter = linkedListIterator_create(logger->entries, 0);
while (linkedListIterator_hasNext(iter)) {
- log_entry_pt entry = linkedListIterator_next(iter);
- logEntry_destroy(&entry);
- }
- linkedListIterator_destroy(iter);
+ log_entry_pt entry = linkedListIterator_next(iter);
+ if (arrayList_contains(logger->listenerEntries, entry)) {
+ arrayList_removeElement(logger->listenerEntries, entry);
+ }
+ logEntry_destroy(&entry);
+ }
+ linkedListIterator_destroy(iter);
+
+ array_list_iterator_pt entryIter = arrayListIterator_create(logger->listenerEntries);
+
+ while (arrayListIterator_hasNext(entryIter)) {
+ log_entry_pt entry = arrayListIterator_next(entryIter);
+ logEntry_destroy(&entry);
+ }
+ arrayListIterator_destroy(entryIter);
+ arrayList_destroy(logger->listenerEntries);
linkedList_destroy(logger->entries);
celixThreadMutex_destroy(&logger->lock);
@@ -321,6 +332,11 @@ static void * log_listenerThread(void *d
}
arrayListIterator_destroy(it);
+ // destroy not-stored entries
+ if (!(logger->store_debug || entry->level != OSGI_LOGSERVICE_DEBUG)) {
+ logEntry_destroy(&entry);
+ }
+
status = celixThreadMutex_unlock(&logger->listenerLock);
if (status != CELIX_SUCCESS) {
logger->running = false;