You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by ab...@apache.org on 2011/12/18 13:02:02 UTC

svn commit: r1220372 - in /incubator/celix/trunk: ./ dependency_manager/ deployment_admin/private/src/ framework/private/include/ framework/private/src/ remote_services/discovery/private/src/ remote_services/topology_manager/private/src/

Author: abroekhuis
Date: Sun Dec 18 12:02:01 2011
New Revision: 1220372

URL: http://svn.apache.org/viewvc?rev=1220372&view=rev
Log:
APR and bug fixes

Modified:
    incubator/celix/trunk/Hello World.launch
    incubator/celix/trunk/Hello world Massif.launch
    incubator/celix/trunk/Remote Services.launch
    incubator/celix/trunk/dependency_manager/service_component.c
    incubator/celix/trunk/deployment_admin/private/src/deployment_admin.c
    incubator/celix/trunk/framework/private/include/framework.h
    incubator/celix/trunk/framework/private/include/headers.h
    incubator/celix/trunk/framework/private/include/manifest.h
    incubator/celix/trunk/framework/private/include/service_reference.h
    incubator/celix/trunk/framework/private/include/service_tracker.h
    incubator/celix/trunk/framework/private/src/bundle.c
    incubator/celix/trunk/framework/private/src/framework.c
    incubator/celix/trunk/framework/private/src/manifest.c
    incubator/celix/trunk/framework/private/src/module.c
    incubator/celix/trunk/framework/private/src/service_reference.c
    incubator/celix/trunk/framework/private/src/service_registry.c
    incubator/celix/trunk/framework/private/src/service_tracker.c
    incubator/celix/trunk/remote_services/discovery/private/src/discovery.c
    incubator/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c

Modified: incubator/celix/trunk/Hello World.launch
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/Hello%20World.launch?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/Hello World.launch (original)
+++ incubator/celix/trunk/Hello World.launch Sun Dec 18 12:02:01 2011
@@ -29,7 +29,7 @@
 <stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
 <booleanAttribute key="org.eclipse.cdt.launch.ENABLE_REGISTER_BOOKKEEPING" value="false"/>
 <booleanAttribute key="org.eclipse.cdt.launch.ENABLE_VARIABLE_BOOKKEEPING" value="false"/>
-<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;element-next-header-capabilities-parser-manifestParser_getCapabilities-(cast)&quot; val=&quot;CAPABILITY&quot;/&gt;&lt;content id=&quot;userData-bundleActivator_stop-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;componentData-bundleActivator_create-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;key-hashMapIterator_remove-(cast)&quot; val=&quot;char *&quot;/&gt;&lt;content id=&quot;userData-userData-fw_startBundle-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;*userData-userData-bundleActivator_create-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;userData-*userData-userData-bundleActivator_create-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;userData-data-bundleA
 ctivator_start-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;userData-fw_startBundle-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;userData-userData-bundleActivator_stop-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;/contentList&gt;"/>
+<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;userData-userData-bundleActivator_stop-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;userData-fw_startBundle-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;userData-data-bundleActivator_start-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;userData-*userData-userData-bundleActivator_create-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;*userData-userData-bundleActivator_create-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;userData-userData-fw_startBundle-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;key-hashMapIterator_remove-(cast)&quot; val=&quot;char *&quot;/&gt;&lt;content id=&quot;componentData-bundleActivator_create-(cast)&quot; val=&quo
 t;log_writer_t&quot;/&gt;&lt;content id=&quot;userData-bundleActivator_stop-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;element-next-header-capabilities-parser-manifestParser_getCapabilities-(cast)&quot; val=&quot;CAPABILITY&quot;/&gt;&lt;/contentList&gt;"/>
 <stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;globalVariableList/&gt;&#10;"/>
 <stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;memoryBlockExpressionList/&gt;&#10;"/>
 <stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="build/launcher/launcher"/>

Modified: incubator/celix/trunk/Hello world Massif.launch
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/Hello%20world%20Massif.launch?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/Hello world Massif.launch (original)
+++ incubator/celix/trunk/Hello world Massif.launch Sun Dec 18 12:02:01 2011
@@ -58,7 +58,7 @@
 <intAttribute key="org.eclipse.linuxtools.valgrind.massif.MASSIF_PEAKINACCURACY" value="10"/>
 <booleanAttribute key="org.eclipse.linuxtools.valgrind.massif.MASSIF_STACKS" value="false"/>
 <intAttribute key="org.eclipse.linuxtools.valgrind.massif.MASSIF_THRESHOLD" value="10"/>
-<stringAttribute key="org.eclipse.linuxtools.valgrind.massif.MASSIF_TIMEUNIT" value="i"/>
+<stringAttribute key="org.eclipse.linuxtools.valgrind.massif.MASSIF_TIMEUNIT" value="B"/>
 <booleanAttribute key="org.eclipse.linuxtools.valgrind.memcheck.MEMCHECK_ALIGNMENT_BOOL" value="false"/>
 <intAttribute key="org.eclipse.linuxtools.valgrind.memcheck.MEMCHECK_ALIGNMENT_VAL" value="0"/>
 <intAttribute key="org.eclipse.linuxtools.valgrind.memcheck.MEMCHECK_FREELIST" value="10000000"/>

Modified: incubator/celix/trunk/Remote Services.launch
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/Remote%20Services.launch?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/Remote Services.launch (original)
+++ incubator/celix/trunk/Remote Services.launch Sun Dec 18 12:02:01 2011
@@ -29,7 +29,7 @@
 <stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
 <booleanAttribute key="org.eclipse.cdt.launch.ENABLE_REGISTER_BOOKKEEPING" value="false"/>
 <booleanAttribute key="org.eclipse.cdt.launch.ENABLE_VARIABLE_BOOKKEEPING" value="false"/>
-<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;userData-fw_startBundle-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;ref-fw_addServiceListener-(cast)&quot; val=&quot;SERVICE_REGISTRATION&quot;/&gt;&lt;content id=&quot;*elementData-elementData-listenerHooks-fw_addServiceListener-(cast)&quot; val=&quot;listener_hook_service_t&quot;/&gt;&lt;content id=&quot;userData-bundleActivator_stop-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;*table-table-exportedServices-admin-activator-bundleActivator_stop-(cast_to_array)&quot; val=&quot;0:1&quot;/&gt;&lt;content id=&quot;componentData-bundleActivator_create-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;key-hashMapIterator_remove-(cast)&quot; val=&quot;char *&quot;/&gt;&lt;content id=&quot;userData-userData-f
 w_startBundle-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;*userData-userData-bundleActivator_create-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;userData-*userData-userData-bundleActivator_create-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;userData-data-bundleActivator_start-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;userData-userData-bundleActivator_stop-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;/contentList&gt;"/>
+<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;contentList&gt;&lt;content id=&quot;key-hashMap_getEntry-(cast)&quot; val=&quot;SERVICE_REFERENCE&quot;/&gt;&lt;content id=&quot;userData-fw_startBundle-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;ref-fw_addServiceListener-(cast)&quot; val=&quot;SERVICE_REGISTRATION&quot;/&gt;&lt;content id=&quot;*elementData-elementData-listenerHooks-fw_addServiceListener-(cast)&quot; val=&quot;listener_hook_service_t&quot;/&gt;&lt;content id=&quot;userData-bundleActivator_stop-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;*table-table-exportedServices-admin-activator-bundleActivator_stop-(cast_to_array)&quot; val=&quot;0:1&quot;/&gt;&lt;content id=&quot;componentData-bundleActivator_create-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;key-hashMapIte
 rator_remove-(cast)&quot; val=&quot;char *&quot;/&gt;&lt;content id=&quot;userData-userData-fw_startBundle-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;*userData-userData-bundleActivator_create-(cast)&quot; val=&quot;DEPENDENCY_ACTIVATOR_BASE&quot;/&gt;&lt;content id=&quot;userData-*userData-userData-bundleActivator_create-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;userData-data-bundleActivator_start-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;content id=&quot;userData-userData-bundleActivator_stop-(cast)&quot; val=&quot;log_writer_t&quot;/&gt;&lt;/contentList&gt;"/>
 <stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;globalVariableList/&gt;&#10;"/>
 <stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;memoryBlockExpressionList/&gt;&#10;"/>
 <stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="build/launcher/launcher"/>

Modified: incubator/celix/trunk/dependency_manager/service_component.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/dependency_manager/service_component.c?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/dependency_manager/service_component.c (original)
+++ incubator/celix/trunk/dependency_manager/service_component.c Sun Dec 18 12:02:01 2011
@@ -332,7 +332,10 @@ void serviceComponent_destroyService(SER
 			serviceDependency_invokeRemoved(dependency);
 		}
 	}
+
 	arrayListIterator_destroy(i);
+
+	arrayList_destroy(service->dependencies);
 }
 
 void serviceComponent_registerService(SERVICE service) {

Modified: incubator/celix/trunk/deployment_admin/private/src/deployment_admin.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/deployment_admin/private/src/deployment_admin.c?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/deployment_admin/private/src/deployment_admin.c (original)
+++ incubator/celix/trunk/deployment_admin/private/src/deployment_admin.c Sun Dec 18 12:02:01 2011
@@ -95,7 +95,7 @@ static void *APR_THREAD_FUNC deploymentA
 				extractBundle(test, tmpDir);
 				char *manifest = apr_pstrcat(admin->pool, tmpDir, "/META-INF/MANIFEST.MF", NULL);
 				MANIFEST mf = NULL;
-				manifest_read(manifest, &mf);
+				manifest_createFromFile(admin->pool, manifest, &mf);
 				deployment_package_t source = NULL;
 				deploymentPackage_create(admin->pool, admin->context, mf, &source);
 				char *name = NULL;

Modified: incubator/celix/trunk/framework/private/include/framework.h
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/include/framework.h?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/include/framework.h (original)
+++ incubator/celix/trunk/framework/private/include/framework.h Sun Dec 18 12:02:01 2011
@@ -70,7 +70,7 @@ celix_status_t fw_isServiceAssignable(FR
 
 //BUNDLE_ARCHIVE fw_createArchive(long id, char * location);
 //void revise(BUNDLE_ARCHIVE archive, char * location);
-celix_status_t getManifest(BUNDLE_ARCHIVE archive, MANIFEST *manifest);
+celix_status_t getManifest(BUNDLE_ARCHIVE archive, apr_pool_t *pool, MANIFEST *manifest);
 
 BUNDLE findBundle(BUNDLE_CONTEXT context);
 SERVICE_REGISTRATION findRegistration(SERVICE_REFERENCE reference);

Modified: incubator/celix/trunk/framework/private/include/headers.h
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/include/headers.h?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/include/headers.h (original)
+++ incubator/celix/trunk/framework/private/include/headers.h Sun Dec 18 12:02:01 2011
@@ -175,11 +175,6 @@ struct serviceTrackerCustomizer {
 
 typedef struct serviceTrackerCustomizer * SERVICE_TRACKER_CUSTOMIZER;
 
-struct serviceTracker {
-	BUNDLE_CONTEXT context;
-	char * filter;
-};
-
 typedef struct serviceTracker * SERVICE_TRACKER;
 
 #endif /* HEADERS_H_ */

Modified: incubator/celix/trunk/framework/private/include/manifest.h
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/include/manifest.h?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/include/manifest.h (original)
+++ incubator/celix/trunk/framework/private/include/manifest.h Sun Dec 18 12:02:01 2011
@@ -26,23 +26,27 @@
 #ifndef MANIFEST_H_
 #define MANIFEST_H_
 
+#include <apr_general.h>
+
 #include "properties.h"
 #include "celix_errno.h"
 
 struct manifest {
+	apr_pool_t *pool;
 	PROPERTIES mainAttributes;
 	HASH_MAP attributes;
 };
 
 typedef struct manifest * MANIFEST;
 
-void manifest_destroy(MANIFEST manifest);
+celix_status_t manifest_create(apr_pool_t *pool, MANIFEST *manifest);
+celix_status_t manifest_createFromFile(apr_pool_t *pool, char *filename, MANIFEST *manifest);
 
 void manifest_clear(MANIFEST manifest);
 PROPERTIES manifest_getMainAttributes(MANIFEST manifest);
 celix_status_t manifest_getEntries(MANIFEST manifest, HASH_MAP *map);
 
-celix_status_t manifest_read(char *filename, MANIFEST *manifest);
+celix_status_t manifest_read(MANIFEST manifest, char *filename);
 void manifest_write(MANIFEST manifest, char * filename);
 
 char * manifest_getValue(MANIFEST manifest, const char * name);

Modified: incubator/celix/trunk/framework/private/include/service_reference.h
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/include/service_reference.h?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/include/service_reference.h (original)
+++ incubator/celix/trunk/framework/private/include/service_reference.h Sun Dec 18 12:02:01 2011
@@ -40,5 +40,7 @@ bool serviceReference_isAssignableTo(SER
 
 celix_status_t serviceReference_getUsingBundles(SERVICE_REFERENCE reference, apr_pool_t *pool, ARRAY_LIST *bundles);
 celix_status_t serviceReference_equals(SERVICE_REFERENCE reference, SERVICE_REFERENCE compareTo, bool *equal);
+unsigned int serviceReference_hashCode(void *referenceP);
+int serviceReference_equals2(void *reference1, void *reference2);
 
 #endif /* SERVICE_REFERENCE_H_ */

Modified: incubator/celix/trunk/framework/private/include/service_tracker.h
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/include/service_tracker.h?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/include/service_tracker.h (original)
+++ incubator/celix/trunk/framework/private/include/service_tracker.h Sun Dec 18 12:02:01 2011
@@ -61,6 +61,4 @@ void * tracker_getServiceByReference(SER
 
 void tracker_serviceChanged(SERVICE_LISTENER listener, SERVICE_EVENT event);
 
-FW_SERVICE_TRACKER findFwServiceTracker(SERVICE_TRACKER tracker);
-
 #endif /* SERVICE_TRACKER_H_ */

Modified: incubator/celix/trunk/framework/private/src/bundle.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/bundle.c?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/bundle.c (original)
+++ incubator/celix/trunk/framework/private/src/bundle.c Sun Dec 18 12:02:01 2011
@@ -202,7 +202,7 @@ celix_status_t bundle_setManifest(BUNDLE
 celix_status_t bundle_createModule(BUNDLE bundle, MODULE *module) {
 	celix_status_t status = CELIX_SUCCESS;
 	MANIFEST headerMap = NULL;
-	status = getManifest(bundle->archive, &headerMap);
+	status = getManifest(bundle->archive, bundle->memoryPool, &headerMap);
 	if (status == CELIX_SUCCESS) {
         long bundleId;
         status = bundleArchive_getId(bundle->archive, &bundleId);

Modified: incubator/celix/trunk/framework/private/src/framework.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/framework.c?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/framework.c (original)
+++ incubator/celix/trunk/framework/private/src/framework.c Sun Dec 18 12:02:01 2011
@@ -205,7 +205,9 @@ celix_status_t framework_destroy(FRAMEWO
 	arrayList_destroy(framework->globalLockWaitersList);
 	arrayList_destroy(framework->serviceListeners);
 
-	//bundleCache_destroy(framework->cache);
+	hashMap_destroy(framework->installedBundleMap, false, false);
+
+	bundleCache_destroy(framework->cache);
 
 	apr_pool_destroy(framework->mp);
 
@@ -541,7 +543,7 @@ celix_status_t fw_startBundle(FRAMEWORK 
 
 			MANIFEST manifest = NULL;
 			char *library;
-			if (getManifest(bundle_getArchive(bundle), &manifest) == CELIX_SUCCESS) {
+			if (getManifest(bundle_getArchive(bundle), bundle->memoryPool, &manifest) == CELIX_SUCCESS) {
                 bundle_setManifest(bundle, manifest);
                 library = manifest_getValue(manifest, HEADER_LIBRARY);
 			}
@@ -745,8 +747,6 @@ celix_status_t fw_stopBundle(FRAMEWORK f
 		MANIFEST manifest = NULL;
 		bundle_getManifest(bundle, &manifest);
 
-		manifest_destroy(manifest);
-
 		framework_setBundleStateAndNotify(framework, bundle, BUNDLE_RESOLVED);
 
 		framework_releaseBundleLock(framework, bundle);
@@ -1199,10 +1199,13 @@ void fw_serviceChanged(FRAMEWORK framewo
 			element = (FW_SERVICE_LISTENER) arrayList_get(framework->serviceListeners, i);
 			matched = (element->filter == NULL) || filter_match(element->filter, registration->properties);
 			if (matched) {
+				apr_pool_t *spool = NULL;
+				apr_pool_create(&spool, element->listener->pool);
+
 				SERVICE_REFERENCE reference = NULL;
-				SERVICE_EVENT event = (SERVICE_EVENT) apr_palloc(element->listener->pool, sizeof(*event));
+				SERVICE_EVENT event = (SERVICE_EVENT) apr_palloc(spool, sizeof(*event));
 
-				serviceRegistry_createServiceReference(framework->registry, element->listener->pool, registration, &reference);
+				serviceRegistry_createServiceReference(framework->registry, spool, registration, &reference);
 
 				event->type = eventType;
 				event->reference = reference;
@@ -1241,7 +1244,7 @@ void fw_serviceChanged(FRAMEWORK framewo
 //	return status;
 //}
 
-celix_status_t getManifest(BUNDLE_ARCHIVE archive, MANIFEST *manifest) {
+celix_status_t getManifest(BUNDLE_ARCHIVE archive, apr_pool_t *pool, MANIFEST *manifest) {
 	celix_status_t status = CELIX_SUCCESS;
 	char mf[256];
 	long refreshCount;
@@ -1260,7 +1263,7 @@ celix_status_t getManifest(BUNDLE_ARCHIV
 							refreshCount,
 							revisionNumber
 							);
-					status = manifest_read(mf, manifest);
+					status = manifest_createFromFile(pool, mf, manifest);
 				}
 			}
 		}

Modified: incubator/celix/trunk/framework/private/src/manifest.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/manifest.c?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/manifest.c (original)
+++ incubator/celix/trunk/framework/private/src/manifest.c Sun Dec 18 12:02:01 2011
@@ -32,6 +32,46 @@
 
 int fpeek(FILE *stream);
 celix_status_t manifest_readAttributes(MANIFEST manifest, PROPERTIES properties, FILE *file);
+apr_status_t manifest_destroy(void *manifestP);
+
+celix_status_t manifest_create(apr_pool_t *pool, MANIFEST *manifest) {
+	celix_status_t status = CELIX_SUCCESS;
+
+	*manifest = apr_palloc(pool, sizeof(**manifest));
+	if (!*manifest) {
+		status = CELIX_ENOMEM;
+	} else {
+		apr_pool_pre_cleanup_register(pool, *manifest, manifest_destroy);
+		(*manifest)->pool = pool;
+		(*manifest)->mainAttributes = properties_create();
+		(*manifest)->attributes = hashMap_create(string_hash, NULL, string_equals, NULL);
+	}
+
+	return status;
+}
+
+apr_status_t manifest_destroy(void *manifestP) {
+	MANIFEST manifest = manifestP;
+	if (manifest != NULL) {
+		properties_destroy(manifest->mainAttributes);
+		hashMap_destroy(manifest->attributes, false, false);
+		manifest->mainAttributes = NULL;
+		manifest->attributes = NULL;
+		manifest = NULL;
+	}
+	return APR_SUCCESS;
+}
+
+celix_status_t manifest_createFromFile(apr_pool_t *pool, char *filename, MANIFEST *manifest) {
+	celix_status_t status = CELIX_SUCCESS;
+
+	status = manifest_create(pool, manifest);
+	if (status == CELIX_SUCCESS) {
+		manifest_read(*manifest, filename);
+	}
+
+	return status;
+}
 
 void manifest_clear(MANIFEST manifest) {
 
@@ -46,110 +86,90 @@ celix_status_t manifest_getEntries(MANIF
 	return CELIX_SUCCESS;
 }
 
-celix_status_t manifest_read(char *filename, MANIFEST *manifest) {
+celix_status_t manifest_read(MANIFEST manifest, char *filename) {
     celix_status_t status = CELIX_SUCCESS;
-	MANIFEST mf = NULL;
 
-	mf = (MANIFEST) malloc(sizeof(*mf));
-	if (mf != NULL) {
-		mf->mainAttributes = properties_create();
-		mf->attributes = hashMap_create(string_hash, NULL, string_equals, NULL);
-
-        FILE *file = fopen ( filename, "r" );
-        if (file != NULL) {
-            char lbuf[512];
-        	manifest_readAttributes(mf, mf->mainAttributes, file);
-
-        	int len;
-            char * name = NULL;
-            bool skipEmptyLines = true;
-            char * lastline;
-
-            while (fgets(lbuf, sizeof(lbuf), file) != NULL ) {
-            	len = strlen(lbuf);
-            	if (lbuf[--len] != '\n') {
-					printf("MANIFEST: Line too long\n");
+	FILE *file = fopen ( filename, "r" );
+	if (file != NULL) {
+		char lbuf[512];
+		manifest_readAttributes(manifest, manifest->mainAttributes, file);
+
+		int len;
+		char * name = NULL;
+		bool skipEmptyLines = true;
+		char * lastline;
+
+		while (fgets(lbuf, sizeof(lbuf), file) != NULL ) {
+			len = strlen(lbuf);
+			if (lbuf[--len] != '\n') {
+				printf("MANIFEST: Line too long\n");
+				return CELIX_FILE_IO_EXCEPTION;
+			}
+			if (len > 0 && lbuf[len - 1] == '\r') {
+				--len;
+			}
+			if (len == 0 && skipEmptyLines) {
+				continue;
+			}
+			skipEmptyLines = false;
+
+			if (name == NULL) {
+				if ((tolower(lbuf[0]) == 'n') && (tolower(lbuf[1]) == 'a') &&
+					(tolower(lbuf[2]) == 'm') && (tolower(lbuf[3]) == 'e') &&
+					(lbuf[4] == ':') && (lbuf[5] == ' ')) {
+					name = (char *) malloc((len + 1) - 6);
+					name = strncpy(name, lbuf+6, len - 6);
+					name[len - 6] = '\0';
+				} else {
+					printf("MANIFEST: Invalid manifest format\n");
 					return CELIX_FILE_IO_EXCEPTION;
 				}
-				if (len > 0 && lbuf[len - 1] == '\r') {
-					--len;
-				}
-				if (len == 0 && skipEmptyLines) {
+
+				if (fpeek(file) == ' ') {
+					int newlen = len - 6;
+					lastline = (char *) malloc(newlen + 1);
+					lastline = strncpy(lastline, lbuf+6, len - 6);
+					lastline[newlen] = '\0';
 					continue;
 				}
-				skipEmptyLines = false;
-
-				if (name == NULL) {
-					if ((tolower(lbuf[0]) == 'n') && (tolower(lbuf[1]) == 'a') &&
-						(tolower(lbuf[2]) == 'm') && (tolower(lbuf[3]) == 'e') &&
-						(lbuf[4] == ':') && (lbuf[5] == ' ')) {
-						name = (char *) malloc((len + 1) - 6);
-						name = strncpy(name, lbuf+6, len - 6);
-						name[len - 6] = '\0';
-					} else {
-						printf("MANIFEST: Invalid manifest format\n");
-						return CELIX_FILE_IO_EXCEPTION;
-					}
-
-					if (fpeek(file) == ' ') {
-						int newlen = len - 6;
-						lastline = (char *) malloc(newlen + 1);
-						lastline = strncpy(lastline, lbuf+6, len - 6);
-						lastline[newlen] = '\0';
-						continue;
-					}
-				} else {
-					int newlen = strlen(lastline) + len;
-					char buf[newlen];
-					strcpy(buf, lastline);
-					strncat(buf, lbuf+1, len - 1);
-					buf[newlen] = '\0';
-
-					if (fpeek(file) == ' ') {
-						lastline = realloc(lastline, strlen(buf) + 1);
-						lastline = strcpy(lastline, buf);
-						continue;
-					}
-					name = (char *) malloc(strlen(buf) + 1);
-					name = strcpy(name, buf);
-					name[strlen(buf)] = '\0';
-					lastline = NULL;
+			} else {
+				int newlen = strlen(lastline) + len;
+				char buf[newlen];
+				strcpy(buf, lastline);
+				strncat(buf, lbuf+1, len - 1);
+				buf[newlen] = '\0';
+
+				if (fpeek(file) == ' ') {
+					lastline = realloc(lastline, strlen(buf) + 1);
+					lastline = strcpy(lastline, buf);
+					continue;
 				}
+				name = (char *) malloc(strlen(buf) + 1);
+				name = strcpy(name, buf);
+				name[strlen(buf)] = '\0';
+				lastline = NULL;
+			}
 
-				PROPERTIES attributes = hashMap_get(mf->attributes, name);
-				if (attributes == NULL) {
-					attributes = properties_create();
-					hashMap_put(mf->attributes, strdup(name), attributes);
-				}
-				manifest_readAttributes(mf, attributes, file);
+			PROPERTIES attributes = hashMap_get(manifest->attributes, name);
+			if (attributes == NULL) {
+				attributes = properties_create();
+				hashMap_put(manifest->attributes, strdup(name), attributes);
+			}
+			manifest_readAttributes(manifest, attributes, file);
 
-                free(name);
-				name = NULL;
-				skipEmptyLines = true;
-            }
-            fclose(file);
-
-            *manifest = mf;
-        } else {
-            printf("Could not read manifest file.\n");
-            status = CELIX_FILE_IO_EXCEPTION;
-        }
+			free(name);
+			name = NULL;
+			skipEmptyLines = true;
+		}
+		fclose(file);
 	} else {
-	    status = CELIX_ENOMEM;
+		printf("Could not read manifest file.\n");
+		status = CELIX_FILE_IO_EXCEPTION;
 	}
 
 	return status;
 }
 
-void manifest_destroy(MANIFEST manifest) {
-	if (manifest != NULL) {
-		properties_destroy(manifest->mainAttributes);
-		manifest->mainAttributes = NULL;
-		free(manifest);
-		manifest = NULL;
-	}
-}
-
 void manifest_write(MANIFEST manifest, char * filename) {
 
 }
@@ -207,6 +227,7 @@ celix_status_t manifest_readAttributes(M
 			}
 			value = (char *) malloc(strlen(buf) + 1);
 			value = strcpy(value, buf);
+			free(lastLine);
 			lastLine = NULL;
 		} else {
 			while (lbuf[i++] != ':') {

Modified: incubator/celix/trunk/framework/private/src/module.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/module.c?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/module.c (original)
+++ incubator/celix/trunk/framework/private/src/module.c Sun Dec 18 12:02:01 2011
@@ -133,9 +133,6 @@ void module_destroy(MODULE module) {
 
 	arrayList_destroy(module->dependentImporters);
 
-	if (module->headerMap != NULL) {
-		manifest_destroy(module->headerMap);
-	}
 	module->headerMap = NULL;
 }
 

Modified: incubator/celix/trunk/framework/private/src/service_reference.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/service_reference.c?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/service_reference.c (original)
+++ incubator/celix/trunk/framework/private/src/service_reference.c Sun Dec 18 12:02:01 2011
@@ -56,7 +56,6 @@ celix_status_t serviceReference_create(a
 
 apr_status_t serviceReference_destroy(void *referenceP) {
 	SERVICE_REFERENCE reference = referenceP;
-	printf("SERVICE_REFERENCE: Destroy\n");
 	reference->bundle = NULL;
 	reference->registration = NULL;
 	return APR_SUCCESS;
@@ -113,3 +112,24 @@ celix_status_t serviceReference_equals(S
 	return CELIX_SUCCESS;
 }
 
+int serviceReference_equals2(void *reference1, void *reference2) {
+	bool equal;
+	serviceReference_equals(reference1, reference2, &equal);
+	return equal;
+}
+
+unsigned int serviceReference_hashCode(void *referenceP) {
+	SERVICE_REFERENCE reference = referenceP;
+	int prime = 31;
+	int result = 1;
+	result = prime * result;
+
+	if (reference != NULL) {
+		intptr_t bundleA = (intptr_t) reference->bundle;
+		intptr_t registrationA = (intptr_t) reference->registration;
+
+		result += bundleA + registrationA;
+	}
+	return result;
+}
+

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=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/service_registry.c (original)
+++ incubator/celix/trunk/framework/private/src/service_registry.c Sun Dec 18 12:02:01 2011
@@ -333,46 +333,12 @@ apr_status_t serviceRegistry_removeRefer
 	serviceReference_getServiceRegistration(reference, &registration);
 
 	if (registration != NULL) {
-		printf("SERVICE_REGISTRY: Destroy: %s\n", registration->className);
 		arrayList_removeElement(registration->references, reference);
 	}
 
 	return APR_SUCCESS;
 }
 
-//ARRAY_LIST serviceRegistry_getServiceReferences(SERVICE_REGISTRY registry, const char * serviceName, FILTER filter) {
-//	ARRAY_LIST references = NULL;
-//	arrayList_create(registry->framework->mp, &references);
-//
-//	HASH_MAP_VALUES registrations = hashMapValues_create(registry->serviceRegistrations);
-//	HASH_MAP_ITERATOR iterator = hashMapValues_iterator(registrations);
-//	while (hashMapIterator_hasNext(iterator)) {
-//		ARRAY_LIST regs = (ARRAY_LIST) hashMapIterator_nextValue(iterator);
-//		int regIdx;
-//		for (regIdx = 0; (regs != NULL) && regIdx < arrayList_size(regs); regIdx++) {
-//			SERVICE_REGISTRATION registration = (SERVICE_REGISTRATION) arrayList_get(regs, regIdx);
-//
-//			bool matched = false;
-//			if ((serviceName == NULL) && ((filter == NULL) || filter_match(filter, registration->properties))) {
-//				matched = true;
-//			} else if (serviceName != NULL) {
-//				if ((strcmp(registration->className, serviceName) == 0) && ((filter == NULL) || filter_match(filter, registration->properties))) {
-//					matched = true;
-//				}
-//			}
-//			if (matched) {
-//				if (serviceRegistration_isValid(registration)) {
-//					arrayList_add(references, registration->reference);
-//				}
-//			}
-//		}
-//	}
-//	hashMapIterator_destroy(iterator);
-//	hashMapValues_destroy(registrations);
-//
-//	return references;
-//}
-
 ARRAY_LIST serviceRegistry_getServicesInUse(SERVICE_REGISTRY registry, BUNDLE bundle) {
 	ARRAY_LIST usages = hashMap_get(registry->inUseMap, bundle);
 	if (usages != NULL) {

Modified: incubator/celix/trunk/framework/private/src/service_tracker.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/service_tracker.c?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/service_tracker.c (original)
+++ incubator/celix/trunk/framework/private/src/service_tracker.c Sun Dec 18 12:02:01 2011
@@ -30,8 +30,15 @@
 #include "constants.h"
 #include "service_reference.h"
 
+struct serviceTracker {
+	BUNDLE_CONTEXT context;
+	char * filter;
+
+	FW_SERVICE_TRACKER fwTracker;
+};
+
 // #todo: Remove this, make SERVICE_TRACKER an ADT to keep "hidden" information
-ARRAY_LIST m_trackers;
+//ARRAY_LIST m_trackers;
 
 void * addingService(FW_SERVICE_TRACKER, SERVICE_REFERENCE);
 celix_status_t serviceTracker_track(FW_SERVICE_TRACKER, SERVICE_REFERENCE, SERVICE_EVENT);
@@ -72,9 +79,9 @@ celix_status_t tracker_createWithFilter(
 	apr_pool_t *pool;
 	bundleContext_getMemoryPool(context, &pool);
 
-	if (m_trackers == NULL) {
-		arrayList_create(pool, &m_trackers);
-	}
+//	if (m_trackers == NULL) {
+//		arrayList_create(pool, &m_trackers);
+//	}
 	(*tracker)->context = context;
 	(*tracker)->filter = filter;
 
@@ -84,7 +91,9 @@ celix_status_t tracker_createWithFilter(
 	arrayList_create(pool, &fw_tracker->tracked);
 	fw_tracker->customizer = customizer;
 
-	arrayList_add(m_trackers, fw_tracker);
+	(*tracker)->fwTracker = fw_tracker;
+
+//	arrayList_add(m_trackers, fw_tracker);
 
 	return CELIX_SUCCESS;
 }
@@ -92,7 +101,7 @@ celix_status_t tracker_createWithFilter(
 celix_status_t serviceTracker_open(SERVICE_TRACKER tracker) {
 	celix_status_t status = CELIX_SUCCESS;
 	SERVICE_LISTENER listener = (SERVICE_LISTENER) malloc(sizeof(*listener));
-	FW_SERVICE_TRACKER fwTracker = findFwServiceTracker(tracker);
+//	FW_SERVICE_TRACKER fwTracker = findFwServiceTracker(tracker);
 	ARRAY_LIST initial = NULL;
 
 	status = bundleContext_getServiceReferences(tracker->context, NULL, tracker->filter, &initial);
@@ -100,15 +109,16 @@ celix_status_t serviceTracker_open(SERVI
 		SERVICE_REFERENCE initial_reference;
 		unsigned int i;
 
-		listener->pool = fwTracker->pool;
+		listener->pool = tracker->fwTracker->pool;
+		listener->handle = tracker;
 		listener->serviceChanged = (void *) tracker_serviceChanged;
 		status = bundleContext_addServiceListener(tracker->context, listener, tracker->filter);
 		if (status == CELIX_SUCCESS) {
-			fwTracker->listener = listener;
+			tracker->fwTracker->listener = listener;
 
 			for (i = 0; i < arrayList_size(initial); i++) {
 				initial_reference = (SERVICE_REFERENCE) arrayList_get(initial, i);
-				serviceTracker_track(fwTracker, initial_reference, NULL);
+				serviceTracker_track(tracker->fwTracker, initial_reference, NULL);
 			}
 			arrayList_clear(initial);
 			arrayList_destroy(initial);
@@ -123,7 +133,7 @@ celix_status_t serviceTracker_open(SERVI
 celix_status_t serviceTracker_close(SERVICE_TRACKER tracker) {
 	celix_status_t status = CELIX_SUCCESS;
 
-	FW_SERVICE_TRACKER fwTracker = findFwServiceTracker(tracker);
+	FW_SERVICE_TRACKER fwTracker = tracker->fwTracker;
 	status = bundleContext_removeServiceListener(tracker->context, fwTracker->listener);
 	if (status == CELIX_SUCCESS) {
 		ARRAY_LIST refs = tracker_getServiceReferences(tracker);
@@ -141,9 +151,10 @@ celix_status_t serviceTracker_close(SERV
 }
 
 void tracker_destroy(SERVICE_TRACKER tracker) {
-	FW_SERVICE_TRACKER fwTracker = findFwServiceTracker(tracker);
+	FW_SERVICE_TRACKER fwTracker = tracker->fwTracker;
 	bundleContext_removeServiceListener(tracker->context, fwTracker->listener);
-	arrayList_destroy(m_trackers);
+//	arrayList_destroy(m_trackers);
+	arrayList_destroy(fwTracker->tracked);
 	free(fwTracker->listener);
 	free(fwTracker);
 	tracker = NULL;
@@ -151,7 +162,7 @@ void tracker_destroy(SERVICE_TRACKER tra
 }
 
 SERVICE_REFERENCE tracker_getServiceReference(SERVICE_TRACKER tracker) {
-	FW_SERVICE_TRACKER fwTracker = findFwServiceTracker(tracker);
+	FW_SERVICE_TRACKER fwTracker = tracker->fwTracker;
 	TRACKED tracked;
 	unsigned int i;
 	for (i = 0; i < arrayList_size(fwTracker->tracked); i++) {
@@ -162,7 +173,7 @@ SERVICE_REFERENCE tracker_getServiceRefe
 }
 
 ARRAY_LIST tracker_getServiceReferences(SERVICE_TRACKER tracker) {
-	FW_SERVICE_TRACKER fwTracker = findFwServiceTracker(tracker);
+	FW_SERVICE_TRACKER fwTracker = tracker->fwTracker;
 	int size = arrayList_size(fwTracker->tracked);
 	ARRAY_LIST references = NULL;
 	arrayList_create(fwTracker->pool, &references);
@@ -176,7 +187,7 @@ ARRAY_LIST tracker_getServiceReferences(
 }
 
 void * tracker_getService(SERVICE_TRACKER tracker) {
-	FW_SERVICE_TRACKER fwTracker = findFwServiceTracker(tracker);
+	FW_SERVICE_TRACKER fwTracker = tracker->fwTracker;
 	TRACKED tracked;
 	unsigned int i;
 	if (fwTracker != NULL) {
@@ -189,7 +200,7 @@ void * tracker_getService(SERVICE_TRACKE
 }
 
 ARRAY_LIST tracker_getServices(SERVICE_TRACKER tracker) {
-	FW_SERVICE_TRACKER fwTracker = findFwServiceTracker(tracker);
+	FW_SERVICE_TRACKER fwTracker = tracker->fwTracker;
 	int size = arrayList_size(fwTracker->tracked);
 	ARRAY_LIST references = NULL;
 	arrayList_create(fwTracker->pool, &references);
@@ -203,7 +214,7 @@ ARRAY_LIST tracker_getServices(SERVICE_T
 }
 
 void * tracker_getServiceByReference(SERVICE_TRACKER tracker, SERVICE_REFERENCE reference) {
-	FW_SERVICE_TRACKER fwTracker = findFwServiceTracker(tracker);
+	FW_SERVICE_TRACKER fwTracker = tracker->fwTracker;
 	TRACKED tracked;
 	unsigned int i;
 	for (i = 0; i < arrayList_size(fwTracker->tracked); i++) {
@@ -218,24 +229,17 @@ void * tracker_getServiceByReference(SER
 }
 
 void tracker_serviceChanged(SERVICE_LISTENER listener, SERVICE_EVENT event) {
-	FW_SERVICE_TRACKER fwTracker;
-	unsigned int i;
-	for (i = 0; i < arrayList_size(m_trackers); i++) {
-		fwTracker = (FW_SERVICE_TRACKER) arrayList_get(m_trackers, i);
-		if (fwTracker->listener == listener) {
-			switch (event->type) {
-				case REGISTERED:
-				case MODIFIED:
-					serviceTracker_track(fwTracker, event->reference, event);
-					break;
-				case UNREGISTERING:
-					serviceTracker_untrack(fwTracker, event->reference, event);
-					break;
-				case MODIFIED_ENDMATCH:
-					break;
-			}
+	SERVICE_TRACKER tracker = listener->handle;
+	switch (event->type) {
+		case REGISTERED:
+		case MODIFIED:
+			serviceTracker_track(tracker->fwTracker, event->reference, event);
+			break;
+		case UNREGISTERING:
+			serviceTracker_untrack(tracker->fwTracker, event->reference, event);
+			break;
+		case MODIFIED_ENDMATCH:
 			break;
-		}
 	}
 }
 
@@ -318,16 +322,16 @@ celix_status_t serviceTracker_untrack(FW
 	return status;
 }
 
-FW_SERVICE_TRACKER findFwServiceTracker(SERVICE_TRACKER tracker) {
-	FW_SERVICE_TRACKER fwTracker;
-	unsigned int i;
-	if (m_trackers != NULL) {
-		for (i = 0; i < arrayList_size(m_trackers); i++) {
-			fwTracker = (FW_SERVICE_TRACKER) arrayList_get(m_trackers, i);
-			if (fwTracker->tracker == tracker) {
-				return fwTracker;
-			}
-		}
-	}
-	return NULL;
-}
+//FW_SERVICE_TRACKER findFwServiceTracker(SERVICE_TRACKER tracker) {
+//	FW_SERVICE_TRACKER fwTracker;
+//	unsigned int i;
+//	if (m_trackers != NULL) {
+//		for (i = 0; i < arrayList_size(m_trackers); i++) {
+//			fwTracker = (FW_SERVICE_TRACKER) arrayList_get(m_trackers, i);
+//			if (fwTracker->tracker == tracker) {
+//				return fwTracker;
+//			}
+//		}
+//	}
+//	return NULL;
+//}

Modified: incubator/celix/trunk/remote_services/discovery/private/src/discovery.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/discovery/private/src/discovery.c?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/discovery/private/src/discovery.c (original)
+++ incubator/celix/trunk/remote_services/discovery/private/src/discovery.c Sun Dec 18 12:02:01 2011
@@ -66,7 +66,7 @@ celix_status_t discovery_create(apr_pool
 	} else {
 		(*discovery)->context = context;
 		(*discovery)->pool = pool;
-		(*discovery)->listenerReferences = hashMap_create(NULL, NULL, NULL, NULL);
+		(*discovery)->listenerReferences = hashMap_create(serviceReference_hashCode, NULL, serviceReference_equals2, NULL);
 		(*discovery)->slpServices = hashMap_create(string_hash, NULL, string_equals, NULL);
 		(*discovery)->running = true;
 		(*discovery)->rsaPort = getenv("RSA_PORT");

Modified: incubator/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c?rev=1220372&r1=1220371&r2=1220372&view=diff
==============================================================================
--- incubator/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c (original)
+++ incubator/celix/trunk/remote_services/topology_manager/private/src/topology_manager.c Sun Dec 18 12:02:01 2011
@@ -55,7 +55,7 @@ celix_status_t topologyManager_create(BU
 		(*manager)->context = context;
 		(*manager)->rsaList = NULL;
 		arrayList_create(pool, &(*manager)->rsaList);
-		(*manager)->exportedServices = hashMap_create(NULL, NULL, NULL, NULL);
+		(*manager)->exportedServices = hashMap_create(serviceReference_hashCode, NULL, serviceReference_equals2, NULL);
 		(*manager)->importedServices = hashMap_create(NULL, NULL, NULL, NULL);
 		(*manager)->importInterests = hashMap_create(string_hash, NULL, string_equals, NULL);
 	}