Author: pnoltes
Date: Wed Jun 4 12:17:56 2014
New Revision: 1600137
URL: http://svn.apache.org/r1600137
Log:
CELIX-119: removed apr mem pools from filter, service_reference and added
resulting needed changes
Modified:
incubator/celix/trunk/framework/private/mock/service_reference_mock.c
incubator/celix/trunk/framework/private/mock/service_registration_mock.c
incubator/celix/trunk/framework/private/mock/service_registry_mock.c
incubator/celix/trunk/framework/private/src/filter.c
incubator/celix/trunk/framework/private/src/framework.c
incubator/celix/trunk/framework/private/src/service_reference.c
incubator/celix/trunk/framework/private/src/service_registry.c
incubator/celix/trunk/framework/public/include/filter.h
incubator/celix/trunk/framework/public/include/service_reference.h
incubator/celix/trunk/framework/public/include/service_registry.h
Modified: incubator/celix/trunk/framework/private/mock/service_reference_mock.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/mock/service_reference_mock.c?rev=1600137&r1=1600136&r2=1600137&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/mock/service_reference_mock.c
(original)
+++ incubator/celix/trunk/framework/private/mock/service_reference_mock.c Wed
Jun 4 12:17:56 2014
@@ -27,7 +27,7 @@
#include "service_reference_private.h"
-celix_status_t serviceReference_create(apr_pool_t *pool, bundle_pt bundle,
service_registration_pt registration, service_reference_pt *reference) {
+celix_status_t serviceReference_create(bundle_pt bundle,
service_registration_pt registration, service_reference_pt *reference) {
mock_c()->actualCall("serviceReference_create")
->withPointerParameters("pool", pool)
->withPointerParameters("bundle", bundle)
@@ -36,6 +36,12 @@ celix_status_t serviceReference_create(a
return mock_c()->returnValue().value.intValue;
}
+celix_status_t serviceReference_destroy(service_reference_pt reference) {
+ mock_c()->actualCall("serviceReference_destroy")
+ ->withPointerParameters("reference", reference)
+ return mock_c()->returnValue().value.intValue;
+}
+
celix_status_t serviceReference_invalidate(service_reference_pt reference) {
mock_c()->actualCall("serviceReference_invalidate")
->withPointerParameters("reference", reference);
@@ -59,7 +65,7 @@ bool serviceReference_isAssignableTo(ser
return mock_c()->returnValue().value.intValue;
}
-celix_status_t serviceReference_getUsingBundles(service_reference_pt
reference, apr_pool_t *pool, array_list_pt *bundles) {
+celix_status_t serviceReference_getUsingBundles(service_reference_pt
reference, array_list_pt *bundles) {
mock_c()->actualCall("serviceReference_getUsingBundles");
return mock_c()->returnValue().value.intValue;
}
Modified:
incubator/celix/trunk/framework/private/mock/service_registration_mock.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/mock/service_registration_mock.c?rev=1600137&r1=1600136&r2=1600137&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/mock/service_registration_mock.c
(original)
+++ incubator/celix/trunk/framework/private/mock/service_registration_mock.c
Wed Jun 4 12:17:56 2014
@@ -27,7 +27,7 @@
#include "service_registration.h"
-service_registration_pt serviceRegistration_create(apr_pool_t *pool,
service_registry_pt registry, bundle_pt bundle, char * serviceName, long
serviceId, void * serviceObject, properties_pt dictionary) {
+service_registration_pt serviceRegistration_create(service_registry_pt
registry, bundle_pt bundle, char * serviceName, long serviceId, void *
serviceObject, properties_pt dictionary) {
mock_c()->actualCall("serviceRegistration_create")
->withPointerParameters("pool", pool)
->withPointerParameters("registry", registry)
Modified: incubator/celix/trunk/framework/private/mock/service_registry_mock.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/mock/service_registry_mock.c?rev=1600137&r1=1600136&r2=1600137&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/mock/service_registry_mock.c
(original)
+++ incubator/celix/trunk/framework/private/mock/service_registry_mock.c Wed
Jun 4 12:17:56 2014
@@ -27,7 +27,7 @@
#include "service_registry.h"
-celix_status_t serviceRegistry_create(apr_pool_t *pool, framework_pt
framework, serviceChanged_function_pt serviceChanged, service_registry_pt
*registry) {
+celix_status_t serviceRegistry_create(framework_pt framework,
serviceChanged_function_pt serviceChanged, service_registry_pt *registry) {
mock_c()->actualCall("serviceRegistry_create");
return mock_c()->returnValue().value.intValue;
}
@@ -89,10 +89,9 @@ void serviceRegistry_ungetServices(servi
mock_c()->actualCall("serviceRegistry_ungetServices");
}
-array_list_pt serviceRegistry_getUsingBundles(service_registry_pt registry,
apr_pool_t *pool, service_reference_pt reference) {
+array_list_pt serviceRegistry_getUsingBundles(service_registry_pt registry,
service_reference_pt reference) {
mock_c()->actualCall("serviceRegistry_getUsingBundles")
->withPointerParameters("registry", registry)
- ->withPointerParameters("pool", pool)
->withPointerParameters("reference", reference);
return mock_c()->returnValue().value.pointerValue;
}
Modified: incubator/celix/trunk/framework/private/src/filter.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/filter.c?rev=1600137&r1=1600136&r2=1600137&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/filter.c (original)
+++ incubator/celix/trunk/framework/private/src/filter.c Wed Jun 4 12:17:56
2014
@@ -32,15 +32,15 @@
#include "array_list.h"
void filter_skipWhiteSpace(char * filterString, int * pos);
-filter_pt filter_parseFilter(char * filterString, int * pos, apr_pool_t *pool);
-filter_pt filter_parseFilterComp(char * filterString, int * pos, apr_pool_t
*pool);
-filter_pt filter_parseAnd(char * filterString, int * pos, apr_pool_t *pool);
-filter_pt filter_parseOr(char * filterString, int * pos, apr_pool_t *pool);
-filter_pt filter_parseNot(char * filterString, int * pos, apr_pool_t *pool);
-filter_pt filter_parseItem(char * filterString, int * pos, apr_pool_t *pool);
+filter_pt filter_parseFilter(char * filterString, int * pos);
+filter_pt filter_parseFilterComp(char * filterString, int * pos);
+filter_pt filter_parseAnd(char * filterString, int * pos);
+filter_pt filter_parseOr(char * filterString, int * pos);
+filter_pt filter_parseNot(char * filterString, int * pos);
+filter_pt filter_parseItem(char * filterString, int * pos);
char * filter_parseAttr(char * filterString, int * pos);
char * filter_parseValue(char * filterString, int * pos);
-array_list_pt filter_parseSubstring(char * filterString, int * pos, apr_pool_t
*pool);
+array_list_pt filter_parseSubstring(char * filterString, int * pos);
celix_status_t filter_compare(OPERAND operand, char * string, void * value2,
bool *result);
celix_status_t filter_compareString(OPERAND operand, char * string, void *
value2, bool *result);
@@ -52,10 +52,10 @@ void filter_skipWhiteSpace(char * filter
}
}
-filter_pt filter_create(char * filterString, apr_pool_t *pool) {
+filter_pt filter_create(char * filterString) {
filter_pt filter = NULL;
int pos = 0;
- filter = filter_parseFilter(filterString, &pos, pool);
+ filter = filter_parseFilter(filterString, &pos);
if (pos != strlen(filterString)) {
printf("Error: Extraneous trailing characters\n");
return NULL;
@@ -90,7 +90,7 @@ void filter_destroy(filter_pt filter) {
}
}
-filter_pt filter_parseFilter(char * filterString, int * pos, apr_pool_t *pool)
{
+filter_pt filter_parseFilter(char * filterString, int * pos) {
filter_pt filter;
filter_skipWhiteSpace(filterString, pos);
if (filterString[*pos] != '(') {
@@ -99,7 +99,7 @@ filter_pt filter_parseFilter(char * filt
}
(*pos)++;
- filter = filter_parseFilterComp(filterString, pos, pool);
+ filter = filter_parseFilterComp(filterString, pos);
filter_skipWhiteSpace(filterString, pos);
@@ -113,7 +113,7 @@ filter_pt filter_parseFilter(char * filt
return filter;
}
-filter_pt filter_parseFilterComp(char * filterString, int * pos, apr_pool_t
*pool) {
+filter_pt filter_parseFilterComp(char * filterString, int * pos) {
char c;
filter_skipWhiteSpace(filterString, pos);
@@ -122,21 +122,21 @@ filter_pt filter_parseFilterComp(char *
switch (c) {
case '&': {
(*pos)++;
- return filter_parseAnd(filterString, pos, pool);
+ return filter_parseAnd(filterString, pos);
}
case '|': {
(*pos)++;
- return filter_parseOr(filterString, pos, pool);
+ return filter_parseOr(filterString, pos);
}
case '!': {
(*pos)++;
- return filter_parseNot(filterString, pos, pool);
+ return filter_parseNot(filterString, pos);
}
}
- return filter_parseItem(filterString, pos, pool);
+ return filter_parseItem(filterString, pos);
}
-filter_pt filter_parseAnd(char * filterString, int * pos, apr_pool_t *pool) {
+filter_pt filter_parseAnd(char * filterString, int * pos) {
filter_pt filter = (filter_pt) malloc(sizeof(*filter));
array_list_pt operands = NULL;
arrayList_create(&operands);
@@ -148,7 +148,7 @@ filter_pt filter_parseAnd(char * filterS
}
while(filterString[*pos] == '(') {
- filter_pt child = filter_parseFilter(filterString, pos, pool);
+ filter_pt child = filter_parseFilter(filterString, pos);
arrayList_add(operands, child);
}
@@ -159,7 +159,7 @@ filter_pt filter_parseAnd(char * filterS
return filter;
}
-filter_pt filter_parseOr(char * filterString, int * pos, apr_pool_t *pool) {
+filter_pt filter_parseOr(char * filterString, int * pos) {
filter_pt filter = (filter_pt) malloc(sizeof(*filter));
array_list_pt operands = NULL;
arrayList_create(&operands);
@@ -171,7 +171,7 @@ filter_pt filter_parseOr(char * filterSt
}
while(filterString[*pos] == '(') {
- filter_pt child = filter_parseFilter(filterString, pos, pool);
+ filter_pt child = filter_parseFilter(filterString, pos);
arrayList_add(operands, child);
}
@@ -182,7 +182,7 @@ filter_pt filter_parseOr(char * filterSt
return filter;
}
-filter_pt filter_parseNot(char * filterString, int * pos, apr_pool_t *pool) {
+filter_pt filter_parseNot(char * filterString, int * pos) {
filter_pt child = NULL;
filter_pt filter = (filter_pt) malloc(sizeof(*filter));
filter_skipWhiteSpace(filterString, pos);
@@ -192,7 +192,7 @@ filter_pt filter_parseNot(char * filterS
return NULL;
}
- child = filter_parseFilter(filterString, pos, pool);
+ child = filter_parseFilter(filterString, pos);
filter->operand = NOT;
filter->attribute = NULL;
@@ -201,7 +201,7 @@ filter_pt filter_parseNot(char * filterS
return filter;
}
-filter_pt filter_parseItem(char * filterString, int * pos, apr_pool_t *pool) {
+filter_pt filter_parseItem(char * filterString, int * pos) {
char * attr = filter_parseAttr(filterString, pos);
filter_skipWhiteSpace(filterString, pos);
switch(filterString[*pos]) {
@@ -256,7 +256,7 @@ filter_pt filter_parseItem(char * filter
}
filter = (filter_pt) malloc(sizeof(*filter));
(*pos)++;
- subs = filter_parseSubstring(filterString, pos, pool);
+ subs = filter_parseSubstring(filterString, pos);
if (arrayList_size(subs) == 1) {
char * string = (char *) arrayList_get(subs, 0);
if (string != NULL) {
@@ -351,7 +351,7 @@ char * filter_parseValue(char * filterSt
return value;
}
-array_list_pt filter_parseSubstring(char * filterString, int * pos, apr_pool_t
*pool) {
+array_list_pt filter_parseSubstring(char * filterString, int * pos) {
char * sub = (char *) malloc(strlen(filterString));
array_list_pt operands = NULL;
int keepRunning = 1;
Modified: incubator/celix/trunk/framework/private/src/framework.c
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/framework.c?rev=1600137&r1=1600136&r2=1600137&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/framework.c (original)
+++ incubator/celix/trunk/framework/private/src/framework.c Wed Jun 4 12:17:56
2014
@@ -1277,7 +1277,7 @@ celix_status_t fw_getServiceReferences(f
status = CELIX_DO_IF(status, bundle_getMemoryPool(bundle, &pool));
if (status == CELIX_SUCCESS) {
if (sfilter != NULL) {
- filter = filter_create(sfilter, pool);
+ filter = filter_create(sfilter);
}
}
@@ -1349,7 +1349,7 @@ void fw_addServiceListener(framework_pt
fwListener->bundle = bundle;
if (sfilter != NULL) {
- filter_pt filter = filter_create(sfilter, pool);
+ filter_pt filter = filter_create(sfilter);
fwListener->filter = filter;
} else {
fwListener->filter = 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=1600137&r1=1600136&r2=1600137&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/service_reference.c (original)
+++ incubator/celix/trunk/framework/private/src/service_reference.c Wed Jun 4
12:17:56 2014
@@ -26,6 +26,8 @@
#include <stdio.h>
#include <stdlib.h>
+#include "service_reference.h"
+
#include "service_registry.h"
#include "service_reference_private.h"
#include "service_registration.h"
@@ -34,16 +36,14 @@
#include "bundle.h"
#include "celix_log.h"
-apr_status_t serviceReference_destroy(void *referenceP);
-celix_status_t serviceReference_create(apr_pool_t *pool, bundle_pt bundle,
service_registration_pt registration, service_reference_pt *reference) {
+celix_status_t serviceReference_create(bundle_pt bundle,
service_registration_pt registration, service_reference_pt *reference) {
celix_status_t status = CELIX_SUCCESS;
- *reference = apr_palloc(pool, sizeof(**reference));
+ *reference = malloc(sizeof(**reference));
if (!*reference) {
status = CELIX_ENOMEM;
} else {
- apr_pool_pre_cleanup_register(pool, *reference,
serviceReference_destroy);
(*reference)->bundle = bundle;
(*reference)->registration = registration;
@@ -54,10 +54,11 @@ celix_status_t serviceReference_create(a
return status;
}
-apr_status_t serviceReference_destroy(void *referenceP) {
- service_reference_pt reference = referenceP;
+apr_status_t serviceReference_destroy(service_reference_pt reference) {
+ serviceRegistry_removeReference(reference);
reference->bundle = NULL;
reference->registration = NULL;
+ free(reference);
return APR_SUCCESS;
}
@@ -104,13 +105,13 @@ bool serviceReference_isAssignableTo(ser
return allow;
}
-celix_status_t serviceReference_getUsingBundles(service_reference_pt
reference, apr_pool_t *pool, array_list_pt *bundles) {
+celix_status_t serviceReference_getUsingBundles(service_reference_pt
reference, array_list_pt *bundles) {
celix_status_t status = CELIX_SUCCESS;
service_registry_pt registry = NULL;
serviceRegistration_getRegistry(reference->registration, ®istry);
- *bundles = serviceRegistry_getUsingBundles(registry, pool, reference);
+ *bundles = serviceRegistry_getUsingBundles(registry, reference);
return status;
}
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=1600137&r1=1600136&r2=1600137&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/service_registry.c (original)
+++ incubator/celix/trunk/framework/private/src/service_registry.c Wed Jun 4
12:17:56 2014
@@ -42,8 +42,6 @@ celix_status_t serviceRegistry_registerS
celix_status_t serviceRegistry_addHooks(service_registry_pt registry, char
*serviceName, void *serviceObject, service_registration_pt registration);
celix_status_t serviceRegistry_removeHook(service_registry_pt registry,
service_registration_pt registration);
-apr_status_t serviceRegistry_removeReference(void *referenceP);
-
celix_status_t serviceRegistry_create(apr_pool_t *ppool, framework_pt
framework, serviceChanged_function_pt serviceChanged, service_registry_pt
*registry) {
celix_status_t status = CELIX_SUCCESS;
apr_pool_t *pool = NULL;
@@ -264,7 +262,7 @@ celix_status_t serviceRegistry_unregiste
unsigned int j;
apr_pool_create(&pool, registry->pool);
- clients = serviceRegistry_getUsingBundles(registry, pool,
reference);
+ clients = serviceRegistry_getUsingBundles(registry, reference);
for (j = 0; (clients != NULL) && (j < arrayList_size(clients));
j++) {
bundle_pt client = (bundle_pt) arrayList_get(clients,
j);
bool ungetResult = true;
@@ -313,19 +311,15 @@ celix_status_t serviceRegistry_unregiste
return CELIX_SUCCESS;
}
+
celix_status_t serviceRegistry_createServiceReference(service_registry_pt
registry, apr_pool_t *pool, service_registration_pt registration,
service_reference_pt *reference) {
celix_status_t status = CELIX_SUCCESS;
bundle_pt bundle = NULL;
array_list_pt references = NULL;
- apr_pool_t *spool = NULL;
- apr_pool_create(&spool, pool);
-
serviceRegistration_getBundle(registration, &bundle);
- serviceReference_create(spool, bundle, registration, reference);
-
- apr_pool_pre_cleanup_register(spool, *reference,
serviceRegistry_removeReference);
+ serviceReference_create(bundle, registration, reference);
serviceRegistration_getServiceReferences(registration, &references);
arrayList_add(references, *reference);
@@ -388,8 +382,7 @@ celix_status_t serviceRegistry_getServic
return status;
}
-apr_status_t serviceRegistry_removeReference(void *referenceP) {
- service_reference_pt reference = referenceP;
+apr_status_t serviceRegistry_removeReference(service_reference_pt reference) {
service_registration_pt registration = NULL;
serviceReference_getServiceRegistration(reference, ®istration);
@@ -510,7 +503,7 @@ void serviceRegistry_ungetServices(servi
arrayList_destroy(fusages);
}
-array_list_pt serviceRegistry_getUsingBundles(service_registry_pt registry,
apr_pool_t *pool, service_reference_pt reference) {
+array_list_pt serviceRegistry_getUsingBundles(service_registry_pt registry,
service_reference_pt reference) {
array_list_pt bundles = NULL;
hash_map_iterator_pt iter;
arrayList_create(&bundles);
Modified: incubator/celix/trunk/framework/public/include/filter.h
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/public/include/filter.h?rev=1600137&r1=1600136&r2=1600137&view=diff
==============================================================================
--- incubator/celix/trunk/framework/public/include/filter.h (original)
+++ incubator/celix/trunk/framework/public/include/filter.h Wed Jun 4 12:17:56
2014
@@ -27,8 +27,6 @@
#ifndef FILTER_H_
#define FILTER_H_
-#include <apr_general.h>
-
#include "celix_errno.h"
#include "properties.h"
#include "celixbool.h"
@@ -36,7 +34,7 @@
typedef struct filter * filter_pt;
-FRAMEWORK_EXPORT filter_pt filter_create(char * filterString, apr_pool_t
*pool);
+FRAMEWORK_EXPORT filter_pt filter_create(char * filterString);
FRAMEWORK_EXPORT void filter_destroy(filter_pt filter);
FRAMEWORK_EXPORT celix_status_t filter_match(filter_pt filter, properties_pt
properties, bool *result);
Modified: incubator/celix/trunk/framework/public/include/service_reference.h
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/public/include/service_reference.h?rev=1600137&r1=1600136&r2=1600137&view=diff
==============================================================================
--- incubator/celix/trunk/framework/public/include/service_reference.h
(original)
+++ incubator/celix/trunk/framework/public/include/service_reference.h Wed Jun
4 12:17:56 2014
@@ -35,7 +35,8 @@ typedef struct serviceReference * servic
#include "bundle.h"
#include "framework_exports.h"
-celix_status_t serviceReference_create(apr_pool_t *pool, bundle_pt bundle,
service_registration_pt registration, service_reference_pt *reference);
+celix_status_t serviceReference_create(bundle_pt bundle,
service_registration_pt registration, service_reference_pt *reference);
+celix_status_t serviceReference_destroy(service_reference_pt reference);
FRAMEWORK_EXPORT celix_status_t
serviceReference_invalidate(service_reference_pt reference);
FRAMEWORK_EXPORT celix_status_t serviceRefernce_isValid(service_reference_pt
reference, bool *result);
@@ -45,7 +46,7 @@ FRAMEWORK_EXPORT celix_status_t serviceR
FRAMEWORK_EXPORT bool serviceReference_isAssignableTo(service_reference_pt
reference, bundle_pt requester, char * serviceName);
-FRAMEWORK_EXPORT celix_status_t
serviceReference_getUsingBundles(service_reference_pt reference, apr_pool_t
*pool, array_list_pt *bundles);
+FRAMEWORK_EXPORT celix_status_t
serviceReference_getUsingBundles(service_reference_pt reference, array_list_pt
*bundles);
FRAMEWORK_EXPORT celix_status_t serviceReference_equals(service_reference_pt
reference, service_reference_pt compareTo, bool *equal);
FRAMEWORK_EXPORT unsigned int serviceReference_hashCode(void *referenceP);
FRAMEWORK_EXPORT int serviceReference_equals2(void *reference1, void
*reference2);
Modified: incubator/celix/trunk/framework/public/include/service_registry.h
URL:
http://svn.apache.org/viewvc/incubator/celix/trunk/framework/public/include/service_registry.h?rev=1600137&r1=1600136&r2=1600137&view=diff
==============================================================================
--- incubator/celix/trunk/framework/public/include/service_registry.h (original)
+++ incubator/celix/trunk/framework/public/include/service_registry.h Wed Jun
4 12:17:56 2014
@@ -51,9 +51,11 @@ celix_status_t serviceRegistry_getServic
celix_status_t serviceRegistry_getService(service_registry_pt registry,
bundle_pt bundle, service_reference_pt reference, void **service);
celix_status_t serviceRegistry_ungetService(service_registry_pt registry,
bundle_pt bundle, service_reference_pt reference, bool *result);
void serviceRegistry_ungetServices(service_registry_pt registry, bundle_pt
bundle);
-array_list_pt serviceRegistry_getUsingBundles(service_registry_pt registry,
apr_pool_t *pool, service_reference_pt reference);
+array_list_pt serviceRegistry_getUsingBundles(service_registry_pt registry,
service_reference_pt reference);
service_registration_pt serviceRegistry_findRegistration(service_registry_pt
registry, service_reference_pt reference);
+
celix_status_t serviceRegistry_createServiceReference(service_registry_pt
registry, apr_pool_t *pool, service_registration_pt registration,
service_reference_pt *reference);
+celix_status_t serviceRegistry_removeReference(service_reference_pt reference);
celix_status_t serviceRegistry_getListenerHooks(service_registry_pt registry,
apr_pool_t *pool, array_list_pt *hooks);