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/05/31 12:02:21 UTC
svn commit: r1129596 - in /incubator/celix/trunk/framework/private:
include/bundle_archive.h src/bundle.c src/bundle_archive.c
src/bundle_cache.c src/framework.c src/service_registry.c
Author: abroekhuis
Date: Tue May 31 10:02:21 2011
New Revision: 1129596
URL: http://svn.apache.org/viewvc?rev=1129596&view=rev
Log:
Applied patch from CELIX-5
Modified:
incubator/celix/trunk/framework/private/include/bundle_archive.h
incubator/celix/trunk/framework/private/src/bundle.c
incubator/celix/trunk/framework/private/src/bundle_archive.c
incubator/celix/trunk/framework/private/src/bundle_cache.c
incubator/celix/trunk/framework/private/src/framework.c
incubator/celix/trunk/framework/private/src/service_registry.c
Modified: incubator/celix/trunk/framework/private/include/bundle_archive.h
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/include/bundle_archive.h?rev=1129596&r1=1129595&r2=1129596&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/include/bundle_archive.h (original)
+++ incubator/celix/trunk/framework/private/include/bundle_archive.h Tue May 31 10:02:21 2011
@@ -36,7 +36,7 @@ typedef struct bundleArchive * BUNDLE_AR
celix_status_t bundleArchive_create(char * archiveRoot, long id, char * location, apr_pool_t *mp, BUNDLE_ARCHIVE *bundle_archive);
celix_status_t bundleArchive_destroy(BUNDLE_ARCHIVE archive);
-BUNDLE_ARCHIVE bundleArchive_createSystemBundleArchive(apr_pool_t *mp);
+celix_status_t bundleArchive_createSystemBundleArchive(apr_pool_t *mp, BUNDLE_ARCHIVE *bundle_archive);
celix_status_t bundleArchive_recreate(char * archiveRoot, apr_pool_t *mp, BUNDLE_ARCHIVE *bundle_archive);
long bundleArchive_getId(BUNDLE_ARCHIVE archive);
char * bundleArchive_getLocation(BUNDLE_ARCHIVE archive);
Modified: incubator/celix/trunk/framework/private/src/bundle.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/bundle.c?rev=1129596&r1=1129595&r2=1129596&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/bundle.c (original)
+++ incubator/celix/trunk/framework/private/src/bundle.c Tue May 31 10:02:21 2011
@@ -39,32 +39,37 @@ MODULE bundle_createModule(BUNDLE bundle
celix_status_t bundle_closeRevisions(BUNDLE bundle);
celix_status_t bundle_create(BUNDLE * bundle, apr_pool_t *mp) {
- *bundle = (BUNDLE) malloc(sizeof(**bundle));
+ celix_status_t status = CELIX_SUCCESS;
+ BUNDLE_ARCHIVE archive = NULL;
+
+ *bundle = (BUNDLE) apr_palloc(mp, sizeof(**bundle));
if (*bundle == NULL) {
return CELIX_ENOMEM;
}
- BUNDLE_ARCHIVE archive = bundleArchive_createSystemBundleArchive(mp);
- (*bundle)->memoryPool = mp;
- (*bundle)->archive = archive;
- (*bundle)->activator = NULL;
- (*bundle)->context = NULL;
- (*bundle)->framework = NULL;
- (*bundle)->state = BUNDLE_INSTALLED;
- (*bundle)->modules = arrayList_create();
+ status = bundleArchive_createSystemBundleArchive(mp, &archive);
+ if (status == CELIX_SUCCESS) {
+ (*bundle)->memoryPool = mp;
+ (*bundle)->archive = archive;
+ (*bundle)->activator = NULL;
+ (*bundle)->context = NULL;
+ (*bundle)->framework = NULL;
+ (*bundle)->state = BUNDLE_INSTALLED;
+ (*bundle)->modules = arrayList_create();
- MODULE module = module_createFrameworkModule((*bundle));
- bundle_addModule(*bundle, module);
- // (*bundle)->module = module;
-
- pthread_mutex_init(&(*bundle)->lock, NULL);
- (*bundle)->lockCount = 0;
- (*bundle)->lockThread = NULL;
+ MODULE module = module_createFrameworkModule((*bundle));
+ bundle_addModule(*bundle, module);
+ // (*bundle)->module = module;
- resolver_addModule(module);
+ pthread_mutex_init(&(*bundle)->lock, NULL);
+ (*bundle)->lockCount = 0;
+ (*bundle)->lockThread = NULL;
+
+ resolver_addModule(module);
- (*bundle)->manifest = NULL;
+ (*bundle)->manifest = NULL;
+ }
- return CELIX_SUCCESS;
+ return status;
}
celix_status_t bundle_createFromArchive(BUNDLE * bundle, FRAMEWORK framework, BUNDLE_ARCHIVE archive, apr_pool_t *bundlePool) {
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=1129596&r1=1129595&r2=1129596&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/bundle_archive.c (original)
+++ incubator/celix/trunk/framework/private/src/bundle_archive.c Tue May 31 10:02:21 2011
@@ -49,18 +49,32 @@ struct bundleArchive {
apr_pool_t *mp;
};
-BUNDLE_ARCHIVE bundleArchive_createSystemBundleArchive(apr_pool_t *mp) {
- BUNDLE_ARCHIVE archive = (BUNDLE_ARCHIVE) malloc(sizeof(*archive));
- archive->id = 0l;
- archive->location = "System Bundle";
- archive->mp = mp;
- archive->archiveRoot = NULL;
- archive->archiveRootDir = NULL;
- archive->revisions = linkedList_create();
- archive->refreshCount = -1;
- time(&archive->lastModified);
+celix_status_t bundleArchive_createSystemBundleArchive(apr_pool_t *mp, BUNDLE_ARCHIVE *bundle_archive) {
+ celix_status_t status;
+ BUNDLE_ARCHIVE archive;
+
+ if (!mp || *bundle_archive) {
+ status = CELIX_ILLEGAL_ARGUMENT;
+ } else {
+ archive = (BUNDLE_ARCHIVE) apr_palloc(mp, sizeof(*archive));
+ if (archive == NULL) {
+ status = CELIX_ENOMEM;
+ } else {
+ archive->id = 0l;
+ archive->location = "System Bundle";
+ archive->mp = mp;
+ archive->archiveRoot = NULL;
+ archive->archiveRootDir = NULL;
+ archive->revisions = linkedList_create();
+ archive->refreshCount = -1;
+ time(&archive->lastModified);
+
+ *bundle_archive = archive;
+ status = CELIX_SUCCESS;
+ }
+ }
- return archive;
+ return status;
}
celix_status_t bundleArchive_getRevisionLocation(BUNDLE_ARCHIVE archive, long revNr, char **revision_location);
Modified: incubator/celix/trunk/framework/private/src/bundle_cache.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/bundle_cache.c?rev=1129596&r1=1129595&r2=1129596&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/bundle_cache.c (original)
+++ incubator/celix/trunk/framework/private/src/bundle_cache.c Tue May 31 10:02:21 2011
@@ -44,22 +44,28 @@ struct bundleCache {
static celix_status_t bundleCache_deleteTree(char * directory, apr_pool_t *mp);
celix_status_t bundleCache_create(PROPERTIES configurationMap, apr_pool_t *mp, BUNDLE_CACHE *bundle_cache) {
- celix_status_t status = CELIX_SUCCESS;
- BUNDLE_CACHE cache = (BUNDLE_CACHE) malloc(sizeof(*cache));
+ celix_status_t status;
+ BUNDLE_CACHE cache;
- if (configurationMap != NULL && mp != NULL && *bundle_cache == NULL) {
- cache->configurationMap = configurationMap;
- char * cacheDir = properties_get(configurationMap, (char *) FRAMEWORK_STORAGE);
- if (cacheDir == NULL) {
- cacheDir = ".cache";
- }
- cache->cacheDir = cacheDir;
- cache->mp = mp;
+ cache = (BUNDLE_CACHE) apr_palloc(mp, (sizeof(*cache)));
+ if (cache == NULL) {
+ status = CELIX_ENOMEM;
+ } else {
+ if (configurationMap != NULL && mp != NULL && *bundle_cache == NULL) {
+ cache->configurationMap = configurationMap;
+ char * cacheDir = properties_get(configurationMap, (char *) FRAMEWORK_STORAGE);
+ if (cacheDir == NULL) {
+ cacheDir = ".cache";
+ }
+ cache->cacheDir = cacheDir;
+ cache->mp = mp;
- *bundle_cache = cache;
- } else {
- status = CELIX_ILLEGAL_ARGUMENT;
- }
+ *bundle_cache = cache;
+ status = CELIX_SUCCESS;
+ } else {
+ status = CELIX_ILLEGAL_ARGUMENT;
+ }
+ }
return status;
}
Modified: incubator/celix/trunk/framework/private/src/framework.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/framework.c?rev=1129596&r1=1129595&r2=1129596&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/framework.c (original)
+++ incubator/celix/trunk/framework/private/src/framework.c Tue May 31 10:02:21 2011
@@ -267,34 +267,38 @@ celix_status_t fw_init(FRAMEWORK framewo
bundle_setHandle(framework->bundle, handle);
- ACTIVATOR activator = (ACTIVATOR) malloc(sizeof(*activator));
- void * (*create)(BUNDLE_CONTEXT context);
- void (*start)(void * handle, BUNDLE_CONTEXT context);
- void (*stop)(void * handle, BUNDLE_CONTEXT context);
- void (*destroy)(void * handle, BUNDLE_CONTEXT context);
- create = dlsym(bundle_getHandle(framework->bundle), BUNDLE_ACTIVATOR_CREATE);
- start = dlsym(bundle_getHandle(framework->bundle), BUNDLE_ACTIVATOR_START);
- stop = dlsym(bundle_getHandle(framework->bundle), BUNDLE_ACTIVATOR_STOP);
- destroy = dlsym(bundle_getHandle(framework->bundle), BUNDLE_ACTIVATOR_DESTROY);
- activator->start = start;
- activator->stop = stop;
- activator->destroy = destroy;
- bundle_setActivator(framework->bundle, activator);
-
- void * userData = NULL;
- if (create != NULL) {
- userData = create(bundle_getContext(framework->bundle));
- }
- activator->userData = userData;
+ ACTIVATOR activator = (ACTIVATOR) apr_palloc(framework->mp, (sizeof(*activator)));
+ if (activator == NULL) {
+ status = CELIX_ENOMEM;
+ } else {
+ void * (*create)(BUNDLE_CONTEXT context);
+ void (*start)(void * handle, BUNDLE_CONTEXT context);
+ void (*stop)(void * handle, BUNDLE_CONTEXT context);
+ void (*destroy)(void * handle, BUNDLE_CONTEXT context);
+ create = dlsym(bundle_getHandle(framework->bundle), BUNDLE_ACTIVATOR_CREATE);
+ start = dlsym(bundle_getHandle(framework->bundle), BUNDLE_ACTIVATOR_START);
+ stop = dlsym(bundle_getHandle(framework->bundle), BUNDLE_ACTIVATOR_STOP);
+ destroy = dlsym(bundle_getHandle(framework->bundle), BUNDLE_ACTIVATOR_DESTROY);
+ activator->start = start;
+ activator->stop = stop;
+ activator->destroy = destroy;
+ bundle_setActivator(framework->bundle, activator);
+
+ void * userData = NULL;
+ if (create != NULL) {
+ userData = create(bundle_getContext(framework->bundle));
+ }
+ activator->userData = userData;
- if (start != NULL) {
- start(userData, bundle_getContext(framework->bundle));
- }
+ if (start != NULL) {
+ start(userData, bundle_getContext(framework->bundle));
+ }
- framework->serviceListeners = arrayList_create();
- framework_releaseBundleLock(framework, framework->bundle);
+ framework->serviceListeners = arrayList_create();
+ framework_releaseBundleLock(framework, framework->bundle);
- status = CELIX_SUCCESS;
+ status = CELIX_SUCCESS;
+ }
}
return status;
}
@@ -491,33 +495,37 @@ celix_status_t fw_startBundle(FRAMEWORK
bundle_setHandle(bundle, handle);
- ACTIVATOR activator = (ACTIVATOR) malloc(sizeof(*activator));
- void * (*create)(BUNDLE_CONTEXT context, void **userData);
- void (*start)(void * userData, BUNDLE_CONTEXT context);
- void (*stop)(void * userData, BUNDLE_CONTEXT context);
- void (*destroy)(void * userData, BUNDLE_CONTEXT context);
- create = dlsym(bundle_getHandle(bundle), BUNDLE_ACTIVATOR_CREATE);
- start = dlsym(bundle_getHandle(bundle), BUNDLE_ACTIVATOR_START);
- stop = dlsym(bundle_getHandle(bundle), BUNDLE_ACTIVATOR_STOP);
- destroy = dlsym(bundle_getHandle(bundle), BUNDLE_ACTIVATOR_DESTROY);
- activator->start = start;
- activator->stop = stop;
- activator->destroy = destroy;
- bundle_setActivator(bundle, activator);
-
- framework_setBundleStateAndNotify(framework, bundle, BUNDLE_STARTING);
-
- void * userData = NULL;
- if (create != NULL) {
- create(bundle_getContext(bundle), &userData);
- }
- activator->userData = userData;
+ ACTIVATOR activator = (ACTIVATOR) apr_palloc(bundle->memoryPool, (sizeof(*activator)));
+ if (activator == NULL) {
+ return CELIX_ENOMEM;
+ } else {
+ void * (*create)(BUNDLE_CONTEXT context, void **userData);
+ void (*start)(void * userData, BUNDLE_CONTEXT context);
+ void (*stop)(void * userData, BUNDLE_CONTEXT context);
+ void (*destroy)(void * userData, BUNDLE_CONTEXT context);
+ create = dlsym(bundle_getHandle(bundle), BUNDLE_ACTIVATOR_CREATE);
+ start = dlsym(bundle_getHandle(bundle), BUNDLE_ACTIVATOR_START);
+ stop = dlsym(bundle_getHandle(bundle), BUNDLE_ACTIVATOR_STOP);
+ destroy = dlsym(bundle_getHandle(bundle), BUNDLE_ACTIVATOR_DESTROY);
+ activator->start = start;
+ activator->stop = stop;
+ activator->destroy = destroy;
+ bundle_setActivator(bundle, activator);
+
+ framework_setBundleStateAndNotify(framework, bundle, BUNDLE_STARTING);
+
+ void * userData = NULL;
+ if (create != NULL) {
+ create(bundle_getContext(bundle), &userData);
+ }
+ activator->userData = userData;
- if (start != NULL) {
- start(userData, bundle_getContext(bundle));
- }
+ if (start != NULL) {
+ start(userData, bundle_getContext(bundle));
+ }
- framework_setBundleStateAndNotify(framework, bundle, BUNDLE_ACTIVE);
+ framework_setBundleStateAndNotify(framework, bundle, BUNDLE_ACTIVE);
+ }
break;
}
@@ -616,7 +624,7 @@ void fw_stopBundle(FRAMEWORK framework,
activator->start = NULL;
activator->stop = NULL;
activator->userData = NULL;
- free(activator);
+ //free(activator);
bundle_setActivator(bundle, NULL);
serviceRegistry_unregisterServices(framework->registry, bundle);
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=1129596&r1=1129595&r2=1129596&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/service_registry.c (original)
+++ incubator/celix/trunk/framework/private/src/service_registry.c Tue May 31 10:02:21 2011
@@ -86,17 +86,23 @@ void serviceRegistry_flushUsageCount(SER
}
SERVICE_REGISTRY serviceRegistry_create(FRAMEWORK framework, void (*serviceChanged)(FRAMEWORK, SERVICE_EVENT, PROPERTIES)) {
- SERVICE_REGISTRY registry = (SERVICE_REGISTRY) malloc(sizeof(*registry));
- registry->serviceChanged = serviceChanged;
- registry->inUseMap = hashMap_create(NULL, NULL, NULL, NULL);
- registry->serviceRegistrations = hashMap_create(NULL, NULL, NULL, NULL);
- registry->framework = framework;
-
- pthread_mutexattr_t mutexattr;
- pthread_mutexattr_init(&mutexattr);
- pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
- pthread_mutex_init(®istry->mutex, &mutexattr);
- registry->currentServiceId = 1l;
+ SERVICE_REGISTRY registry;
+
+ registry = (SERVICE_REGISTRY) apr_palloc(framework->mp, (sizeof(*registry)));
+ if (registry == NULL) {
+ // no memory
+ } else {
+ registry->serviceChanged = serviceChanged;
+ registry->inUseMap = hashMap_create(NULL, NULL, NULL, NULL);
+ registry->serviceRegistrations = hashMap_create(NULL, NULL, NULL, NULL);
+ registry->framework = framework;
+
+ pthread_mutexattr_t mutexattr;
+ pthread_mutexattr_init(&mutexattr);
+ pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
+ pthread_mutex_init(®istry->mutex, &mutexattr);
+ registry->currentServiceId = 1l;
+ }
return registry;
}
@@ -105,8 +111,6 @@ celix_status_t serviceRegistry_destroy(S
hashMap_destroy(registry->serviceRegistrations, false, false);
pthread_mutex_destroy(®istry->mutex);
- free(registry);
-
return CELIX_SUCCESS;
}