Author: abroekhuis
Date: Tue Jul 1 11:39:57 2014
New Revision: 1607050
URL: http://svn.apache.org/r1607050
Log:
CELIX-119: Fixed memory leaks and crashes due to incorrect reference removal.
Modified:
incubator/celix/trunk/examples/CMakeLists.txt
incubator/celix/trunk/examples/deploy.cmake
incubator/celix/trunk/examples/osgi-in-action/chapter01-greeting-example/client/CMakeLists.txt
incubator/celix/trunk/examples/osgi-in-action/chapter01-greeting-example/greeting/CMakeLists.txt
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-listener/CMakeLists.txt
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-listener/private/src/listener_example.c
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-lookup/CMakeLists.txt
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-lookup/private/src/activator.c
incubator/celix/trunk/framework/private/mock/manifest_mock.c
incubator/celix/trunk/framework/private/mock/wire_mock.c
incubator/celix/trunk/framework/private/src/bundle_archive.c
incubator/celix/trunk/framework/private/src/framework.c
incubator/celix/trunk/framework/private/src/module.c
incubator/celix/trunk/framework/private/src/service_registration.c
incubator/celix/trunk/framework/private/src/service_registry.c
incubator/celix/trunk/framework/public/include/manifest.h
incubator/celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
incubator/celix/trunk/shell/private/src/shell.c
incubator/celix/trunk/shell_tui/private/src/shell_tui.c
Modified: incubator/celix/trunk/examples/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/examples/CMakeLists.txt?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/examples/CMakeLists.txt (original)
+++ incubator/celix/trunk/examples/CMakeLists.txt Tue Jul 1 11:39:57 2014
@@ -23,9 +23,9 @@ if (EXAMPLES)
#add_subdirectory(whiteboard)
#add_subdirectory(echo_service)
- #add_subdirectory(osgi-in-action/chapter04-correct-lookup)
- #add_subdirectory(osgi-in-action/chapter04-correct-listener)
- #add_subdirectory(osgi-in-action/chapter01-greeting-example)
+ add_subdirectory(osgi-in-action/chapter04-correct-lookup)
+ add_subdirectory(osgi-in-action/chapter04-correct-listener)
+ add_subdirectory(osgi-in-action/chapter01-greeting-example)
#add_subdirectory(osgi-in-action/chapter04-paint-example)
#add_subdirectory(embedding)
Modified: incubator/celix/trunk/examples/deploy.cmake
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/examples/deploy.cmake?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/examples/deploy.cmake (original)
+++ incubator/celix/trunk/examples/deploy.cmake Tue Jul 1 11:39:57 2014
@@ -16,8 +16,8 @@
# under the License.
is_enabled(EXAMPLES)
if (EXAMPLES)
- #deploy(chapter01-greeting-example BUNDLES shell shell_tui log_service
chapter01-greeting-example-client chapter01-greeting-example)
- #deploy(chapter04-correct-listener BUNDLES shell shell_tui log_service
chapter04-correct-listener)
+ deploy(chapter01-greeting-example BUNDLES shell shell_tui log_service
chapter01-greeting-example-client chapter01-greeting-example)
+ deploy(chapter04-correct-listener BUNDLES shell shell_tui log_service
chapter04-correct-listener)
deploy("hello_world" BUNDLES shell shell_tui
org.apache.incubator.celix.helloworld hello_world_test log_service)
#deploy("wb" BUNDLES tracker publisherA publisherB shell shell_tui
log_service log_writer)
Modified:
incubator/celix/trunk/examples/osgi-in-action/chapter01-greeting-example/client/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/examples/osgi-in-action/chapter01-greeting-example/client/CMakeLists.txt?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
---
incubator/celix/trunk/examples/osgi-in-action/chapter01-greeting-example/client/CMakeLists.txt
(original)
+++
incubator/celix/trunk/examples/osgi-in-action/chapter01-greeting-example/client/CMakeLists.txt
Tue Jul 1 11:39:57 2014
@@ -15,6 +15,9 @@
# specific language governing permissions and limitations
# under the License.
+SET(BUNDLE_SYMBOLICNAME
"apache_celix_examples_chapter01_greeting_example_client")
+SET(BUNDLE_VERSION "0.0.1")
+
bundle(chapter01-greeting-example-client SOURCES private/src/client)
include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
include_directories("../greeting/public/include")
Modified:
incubator/celix/trunk/examples/osgi-in-action/chapter01-greeting-example/greeting/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/examples/osgi-in-action/chapter01-greeting-example/greeting/CMakeLists.txt?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
---
incubator/celix/trunk/examples/osgi-in-action/chapter01-greeting-example/greeting/CMakeLists.txt
(original)
+++
incubator/celix/trunk/examples/osgi-in-action/chapter01-greeting-example/greeting/CMakeLists.txt
Tue Jul 1 11:39:57 2014
@@ -15,6 +15,9 @@
# specific language governing permissions and limitations
# under the License.
+SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_chapter01_greeting_example")
+SET(BUNDLE_VERSION "0.0.1")
+
bundle(chapter01-greeting-example SOURCES
private/src/activator
private/src/greeting_impl
Modified:
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-listener/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-listener/CMakeLists.txt?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
---
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-listener/CMakeLists.txt
(original)
+++
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-listener/CMakeLists.txt
Tue Jul 1 11:39:57 2014
@@ -15,7 +15,9 @@
# specific language governing permissions and limitations
# under the License.
+SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_chapter04_correct_listener")
+SET(BUNDLE_VERSION "0.0.1")
bundle(chapter04-correct-listener SOURCES private/src/listener_example)
include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
include_directories("${PROJECT_SOURCE_DIR}/log_service/public/include")
-target_link_libraries(chapter04-correct-listener celix_framework)
+target_link_libraries(chapter04-correct-listener celix_framework
${APRUTIL_LIBRARY})
Modified:
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-listener/private/src/listener_example.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-listener/private/src/listener_example.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
---
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-listener/private/src/listener_example.c
(original)
+++
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-listener/private/src/listener_example.c
Tue Jul 1 11:39:57 2014
@@ -26,6 +26,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <apr_general.h>
+#include <apr_thread_proc.h>
#include "bundle_activator.h"
#include "log_service.h"
@@ -100,7 +101,6 @@ celix_status_t bundleActivator_start(voi
listener->handle = activator;
listener->serviceChanged = (void *)
listenerExample_serviceChanged;
- listener->pool = pool;
status = bundleContext_addServiceListener(context, listener,
filter);
if (status == CELIX_SUCCESS) {
activator->listener = listener;
Modified:
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-lookup/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-lookup/CMakeLists.txt?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
---
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-lookup/CMakeLists.txt
(original)
+++
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-lookup/CMakeLists.txt
Tue Jul 1 11:39:57 2014
@@ -15,6 +15,9 @@
# specific language governing permissions and limitations
# under the License.
+SET(BUNDLE_SYMBOLICNAME "apache_celix_examples_chapter04_correct_lookup")
+SET(BUNDLE_VERSION "0.0.1")
+
bundle(chapter04-correct-lookup SOURCES private/src/activator)
include_directories("${PROJECT_SOURCE_DIR}/utils/public/include")
include_directories("${PROJECT_SOURCE_DIR}/log_service/public/include")
Modified:
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-lookup/private/src/activator.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-lookup/private/src/activator.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
---
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-lookup/private/src/activator.c
(original)
+++
incubator/celix/trunk/examples/osgi-in-action/chapter04-correct-lookup/private/src/activator.c
Tue Jul 1 11:39:57 2014
@@ -26,6 +26,8 @@
#include <stdlib.h>
#include <stdio.h>
#include <apr_general.h>
+#include <apr_thread_proc.h>
+#include <apr_portable.h>
#include "bundle_activator.h"
#include "bundle_context.h"
Modified: incubator/celix/trunk/framework/private/mock/manifest_mock.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/mock/manifest_mock.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/mock/manifest_mock.c (original)
+++ incubator/celix/trunk/framework/private/mock/manifest_mock.c Tue Jul 1
11:39:57 2014
@@ -40,6 +40,11 @@ celix_status_t manifest_createFromFile(c
return mock_c()->returnValue().value.intValue;
}
+celix_status_t manifest_destroy(manifest_pt manifest) {
+ mock_c()->actualCall("manifest_destroy");
+ return mock_c()->returnValue().value.intValue;
+}
+
void manifest_clear(manifest_pt manifest) {
mock_c()->actualCall("manifest_clear");
}
Modified: incubator/celix/trunk/framework/private/mock/wire_mock.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/mock/wire_mock.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/mock/wire_mock.c (original)
+++ incubator/celix/trunk/framework/private/mock/wire_mock.c Tue Jul 1
11:39:57 2014
@@ -33,6 +33,11 @@ celix_status_t wire_create(module_pt imp
return mock_c()->returnValue().value.intValue;
}
+celix_status_t wire_destroy(wire_pt wire) {
+ mock_c()->actualCall("wire_destroy");
+ return mock_c()->returnValue().value.intValue;
+}
+
celix_status_t wire_getCapability(wire_pt wire, capability_pt *capability) {
mock_c()->actualCall("requirement_create");
return mock_c()->returnValue().value.intValue;
Modified: incubator/celix/trunk/framework/private/src/bundle_archive.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/bundle_archive.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/bundle_archive.c (original)
+++ incubator/celix/trunk/framework/private/src/bundle_archive.c Tue Jul 1
11:39:57 2014
@@ -707,7 +707,7 @@ static celix_status_t bundleArchive_dele
if (dp->d_type == DT_DIR) {
status = bundleArchive_deleteTree(archive, subdir);
} else {
- if (rmdir(subdir) != 0) {
+ if (remove(subdir) != 0) {
status = CELIX_FILE_IO_EXCEPTION;
break;
}
Modified: incubator/celix/trunk/framework/private/src/framework.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/framework.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/framework.c (original)
+++ incubator/celix/trunk/framework/private/src/framework.c Tue Jul 1 11:39:57
2014
@@ -1567,7 +1567,7 @@ void fw_serviceChanged(framework_pt fram
element->listener->serviceChanged(element->listener, event);
- serviceReference_destroy(event->reference);
+// serviceReference_destroy(event->reference);
free(event);
//TODO cleanup service reference
Modified: incubator/celix/trunk/framework/private/src/module.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/module.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/module.c (original)
+++ incubator/celix/trunk/framework/private/src/module.c Tue Jul 1 11:39:57
2014
@@ -116,14 +116,16 @@ void module_destroy(module_pt module) {
linkedList_destroy(module->requirements);
version_destroy(module->version);
- linked_list_iterator_pt iter = linkedListIterator_create(module->wires,
0);
- while (linkedListIterator_hasNext(iter)) {
- wire_pt next = linkedListIterator_next(iter);
- linkedListIterator_remove(iter);
- wire_destroy(next);
+ if (module->wires != NULL) {
+ linked_list_iterator_pt iter =
linkedListIterator_create(module->wires, 0);
+ while (linkedListIterator_hasNext(iter)) {
+ wire_pt next = linkedListIterator_next(iter);
+ linkedListIterator_remove(iter);
+ wire_destroy(next);
+ }
+ linkedListIterator_destroy(iter);
+ linkedList_destroy(module->wires);
}
- linkedListIterator_destroy(iter);
- linkedList_destroy(module->wires);
module->headerMap = NULL;
Modified: incubator/celix/trunk/framework/private/src/service_registration.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/service_registration.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/service_registration.c
(original)
+++ incubator/celix/trunk/framework/private/src/service_registration.c Tue Jul
1 11:39:57 2014
@@ -95,6 +95,7 @@ celix_status_t serviceRegistration_destr
celixThreadMutex_destroy(®istration->mutex);
+ registration = NULL;
free(registration);
return CELIX_SUCCESS;
Modified: incubator/celix/trunk/framework/private/src/service_registry.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/service_registry.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/service_registry.c (original)
+++ incubator/celix/trunk/framework/private/src/service_registry.c Tue Jul 1
11:39:57 2014
@@ -444,6 +444,7 @@ celix_status_t serviceRegistry_ungetServ
if ((serviceRegistration_isValid(registration)) || (usage->count <= 0))
{
usage->service = NULL;
serviceRegistry_flushUsageCount(registry, bundle, reference);
+ serviceReference_destroy(reference);
}
celixThreadMutex_unlock(®istry->mutex);
@@ -476,7 +477,6 @@ void serviceRegistry_ungetServices(servi
while (ungetResult) {
serviceRegistry_ungetService(registry, bundle,
reference, &ungetResult);
}
- serviceReference_destroy(reference);
}
arrayList_destroy(fusages);
Modified: incubator/celix/trunk/framework/public/include/manifest.h
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/public/include/manifest.h?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/framework/public/include/manifest.h (original)
+++ incubator/celix/trunk/framework/public/include/manifest.h Tue Jul 1
11:39:57 2014
@@ -40,6 +40,7 @@ typedef struct manifest * manifest_pt;
FRAMEWORK_EXPORT celix_status_t manifest_create(manifest_pt *manifest);
FRAMEWORK_EXPORT celix_status_t manifest_createFromFile(char *filename,
manifest_pt *manifest);
+FRAMEWORK_EXPORT celix_status_t manifest_destroy(manifest_pt manifest);
FRAMEWORK_EXPORT void manifest_clear(manifest_pt manifest);
FRAMEWORK_EXPORT properties_pt manifest_getMainAttributes(manifest_pt
manifest);
Modified:
incubator/celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
---
incubator/celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
(original)
+++
incubator/celix/trunk/remote_services/remote_service_admin_http/private/src/remote_service_admin_impl.c
Tue Jul 1 11:39:57 2014
@@ -405,6 +405,9 @@ celix_status_t remoteServiceAdmin_create
(*description)->frameworkUUID = uuid;
(*description)->serviceId =
apr_atoi64(properties_get(serviceProperties, (char *)
OSGI_FRAMEWORK_SERVICE_ID));
(*description)->id = apr_pstrdup(childPool, "TODO"); //
does not work, txt record to big ?? --> apr_pstrcat(childPool, uuid, "-",
(*description)->serviceId, NULL);
+// char *id = apr_pstrcat(childPool, uuid, "-",
properties_get(serviceProperties, (char *) OSGI_FRAMEWORK_SERVICE_ID), NULL);
+// printf("ID %s\n", id);
+// (*description)->id = id;
(*description)->service = interface;
}
}
Modified: incubator/celix/trunk/shell/private/src/shell.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/shell/private/src/shell.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/shell/private/src/shell.c (original)
+++ incubator/celix/trunk/shell/private/src/shell.c Tue Jul 1 11:39:57 2014
@@ -170,7 +170,9 @@ void shell_addCommand(shell_pt shell, se
void shell_removeCommand(shell_pt shell, service_reference_pt reference) {
command_service_pt command = (command_service_pt)
hashMap_remove(shell->commandReferenceMap, reference);
if (command != NULL) {
+ bool result = false;
hashMap_remove(shell->commandNameMap,
command->getName(command->command));
+ bundleContext_ungetService(shell->bundleContext, reference,
&result);
}
}
@@ -178,6 +180,8 @@ void shell_serviceChanged(service_listen
shell_pt shell = (shell_pt) listener->handle;
if (event->type == OSGI_FRAMEWORK_SERVICE_EVENT_REGISTERED) {
shell_addCommand(shell, event->reference);
+ } else if (event->type == OSGI_FRAMEWORK_SERVICE_EVENT_UNREGISTERING) {
+ shell_removeCommand(shell, event->reference);
}
}
Modified: incubator/celix/trunk/shell_tui/private/src/shell_tui.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/shell_tui/private/src/shell_tui.c?rev=1607050&r1=1607049&r2=1607050&view=diff
==============================================================================
--- incubator/celix/trunk/shell_tui/private/src/shell_tui.c (original)
+++ incubator/celix/trunk/shell_tui/private/src/shell_tui.c Tue Jul 1 11:39:57
2014
@@ -101,7 +101,6 @@ void shellTui_serviceChanged(service_lis
shellTui_initializeService(act);
} else if ((event->type == OSGI_FRAMEWORK_SERVICE_EVENT_UNREGISTERING)
&& (act->reference == event->reference)) {
bundleContext_ungetService(act->context, act->reference,
&result);
- serviceReference_destroy(act->reference);
act->reference = NULL;
act->shell = NULL;