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 2013/11/26 10:05:22 UTC
svn commit: r1545574 - in /incubator/celix/trunk/framework/private/src:
bundle.c bundle_archive.c bundle_cache.c framework.c
Author: abroekhuis
Date: Tue Nov 26 09:05:21 2013
New Revision: 1545574
URL: http://svn.apache.org/r1545574
Log:
Small updates wrt memory and pool usage.
Modified:
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
Modified: incubator/celix/trunk/framework/private/src/bundle.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/bundle.c?rev=1545574&r1=1545573&r2=1545574&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/bundle.c (original)
+++ incubator/celix/trunk/framework/private/src/bundle.c Tue Nov 26 09:05:21 2013
@@ -109,7 +109,7 @@ celix_status_t bundle_createFromArchive(
status = bundle_createModule(*bundle, &module);
if (status == CELIX_SUCCESS) {
apr_status_t apr_status;
-
+
bundle_addModule(*bundle, module);
apr_status = apr_thread_mutex_create(&(*bundle)->lock, APR_THREAD_MUTEX_UNNESTED, (*bundle)->memoryPool);
if (apr_status != APR_SUCCESS) {
@@ -137,6 +137,9 @@ celix_status_t bundle_destroy(bundle_pt
}
arrayListIterator_destroy(iter);
arrayList_destroy(bundle->modules);
+ apr_thread_mutex_destroy(bundle->lock);
+
+ apr_pool_destroy(bundle->memoryPool);
return CELIX_SUCCESS;
}
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=1545574&r1=1545573&r2=1545574&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/bundle_archive.c (original)
+++ incubator/celix/trunk/framework/private/src/bundle_archive.c Tue Nov 26 09:05:21 2013
@@ -151,11 +151,6 @@ celix_status_t bundleArchive_create(char
static apr_status_t bundleArchive_destroy(void *archiveP) {
apr_status_t status = APR_SUCCESS;
bundle_archive_pt archive = archiveP;
- if (archive != NULL) {
- if (archive->archiveRootDir != NULL) {
- status = apr_dir_close(archive->archiveRootDir);
- }
- }
archive = NULL;
framework_logIfError(status, NULL, "Could not create archive");
@@ -748,39 +743,35 @@ static celix_status_t bundleArchive_init
if (apr_dir_make(archive->archiveRoot, APR_UREAD|APR_UWRITE|APR_UEXECUTE, archive->mp) != APR_SUCCESS) {
status = CELIX_FILE_IO_EXCEPTION;
} else {
- apr_status_t apr_status = apr_dir_open(&archive->archiveRootDir, archive->archiveRoot, archive->mp);
+ apr_pool_t *spool = NULL;
+
+ apr_pool_create(&spool, archive->mp);
+ apr_status_t apr_status = apr_dir_open(&archive->archiveRootDir, archive->archiveRoot, spool);
if (apr_status != APR_SUCCESS) {
status = CELIX_FILE_IO_EXCEPTION;
} else {
apr_file_t *bundleIdFile;
apr_status_t apr_status;
- apr_pool_t *spool = NULL;
char *bundleId = NULL;
- apr_pool_create(&spool, archive->mp);
bundleId = (char *)apr_palloc(spool, sizeof(*bundleId) * (strlen(archive->archiveRoot) + 11));
bundleId = apr_pstrcat(spool, archive->archiveRoot, "/bundle.id", NULL);
-
- apr_status = apr_file_open(&bundleIdFile, bundleId, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, archive->mp);
- apr_pool_destroy(spool);
+ apr_status = apr_file_open(&bundleIdFile, bundleId, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, spool);
if (apr_status != APR_SUCCESS) {
status = CELIX_FILE_IO_EXCEPTION;
} else {
char * bundleLocation;
apr_file_t *bundleLocationFile;
- apr_pool_t *subpool = NULL;
apr_file_printf(bundleIdFile, "%ld", archive->id);
// Ignore close status, let it fail if needed again
apr_file_close(bundleIdFile);
- apr_pool_create(&subpool, archive->mp);
- bundleLocation = (char *) apr_palloc(subpool, strlen(archive->archiveRoot) + 17);
- strcpy(bundleLocation,archive->archiveRoot);
- strcat(bundleLocation, "/bundle.location");
-
- apr_status = apr_file_open(&bundleLocationFile, bundleLocation, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, archive->mp);
+ bundleLocation = (char *) apr_palloc(spool, strlen(archive->archiveRoot) + 17);
+ bundleLocation = apr_pstrcat(spool, archive->archiveRoot, "/bundle.location", NULL);
+
+ apr_status = apr_file_open(&bundleLocationFile, bundleLocation, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, spool);
if (apr_status != APR_SUCCESS) {
status = CELIX_FILE_IO_EXCEPTION;
} else {
@@ -790,9 +781,10 @@ static celix_status_t bundleArchive_init
status = bundleArchive_writeLastModified(archive);
}
- apr_pool_destroy(subpool);
}
+ status = apr_dir_close(archive->archiveRootDir);
}
+ apr_pool_destroy(spool);
}
}
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=1545574&r1=1545573&r2=1545574&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/bundle_cache.c (original)
+++ incubator/celix/trunk/framework/private/src/bundle_cache.c Tue Nov 26 09:05:21 2013
@@ -144,7 +144,6 @@ celix_status_t bundleCache_createArchive
if (cache && location && bundlePool) {
archiveRoot = apr_psprintf(bundlePool, "%s/bundle%ld", cache->cacheDir, id);
-
status = bundleArchive_create(archiveRoot, id, location, inputFile, bundlePool, bundle_archive);
}
Modified: incubator/celix/trunk/framework/private/src/framework.c
URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/framework.c?rev=1545574&r1=1545573&r2=1545574&view=diff
==============================================================================
--- incubator/celix/trunk/framework/private/src/framework.c (original)
+++ incubator/celix/trunk/framework/private/src/framework.c Tue Nov 26 09:05:21 2013
@@ -190,7 +190,9 @@ celix_status_t framework_create(framewor
(*framework)->shutdownGate = NULL;
(*framework)->configurationMap = config;
- status = CELIX_DO_IF(status, bundle_create(&(*framework)->bundle, (*framework)->mp));
+ apr_pool_t *pool = NULL;
+ apr_pool_create(&pool, (*framework)->mp);
+ status = CELIX_DO_IF(status, bundle_create(&(*framework)->bundle, pool));
status = CELIX_DO_IF(status, arrayList_create((*framework)->mp, &(*framework)->globalLockWaitersList));
status = CELIX_DO_IF(status, bundle_setFramework((*framework)->bundle, (*framework)));
if (status == CELIX_SUCCESS) {
@@ -504,7 +506,7 @@ celix_status_t fw_installBundle2(framewo
}
}
- if (status == CELIX_SUCCESS) {
+ if (status == CELIX_SUCCESS) {
*bundle = framework_getBundle(framework, location);
if (*bundle != NULL) {
framework_releaseInstallLock(framework, location);
@@ -537,11 +539,10 @@ celix_status_t fw_installBundle2(framewo
}
}
}
- status = CELIX_DO_IF(status, framework_releaseInstallLock(framework, location));
- }
+ }
+ status = CELIX_DO_IF(status, framework_releaseInstallLock(framework, location));
if (status != CELIX_SUCCESS) {
- status = CELIX_DO_IF(status, framework_releaseInstallLock(framework, location));
fw_logCode(FW_LOG_ERROR, status, "Could not install bundle");
} else {
status = CELIX_DO_IF(status, fw_fireBundleEvent(framework, BUNDLE_EVENT_INSTALLED, *bundle));
@@ -671,10 +672,10 @@ celix_status_t fw_startBundle(framework_
// apr_dso_load(&handle, libraryPath, bundle->memoryPool);
handle = fw_openLibrary(libraryPath);
if (handle == NULL) {
- char err[256];
+ char err[1024];
sprintf(err, "library could not be opened: %s", fw_getLastError());
// #TODO this is wrong
- // error = err;
+ error = err;
status = CELIX_BUNDLE_EXCEPTION;
}
@@ -890,7 +891,7 @@ celix_status_t fw_stopBundle(framework_p
// #TODO remove listeners for bundle
// #TODO enable dlclose call
-// dlclose(bundle_getHandle(bundle));
+ dlclose(bundle_getHandle(bundle));
if (context != NULL) {
status = CELIX_DO_IF(status, bundleContext_destroy(context));
@@ -990,14 +991,14 @@ celix_status_t fw_uninstallBundle(framew
if (status != CELIX_SUCCESS) {
- module_pt module = NULL;
- char *symbolicName = NULL;
- long id = 0;
- bundle_getCurrentModule(bundle, &module);
- module_getSymbolicName(module, &symbolicName);
- bundle_getBundleId(bundle, &id);
+// module_pt module = NULL;
+// char *symbolicName = NULL;
+// long id = 0;
+// bundle_getCurrentModule(bundle, &module);
+// module_getSymbolicName(module, &symbolicName);
+// bundle_getBundleId(bundle, &id);
- framework_logIfError(status, error, "Cannot uninstall bundle: %s [%ld]", symbolicName, id);
+ framework_logIfError(status, error, "Cannot uninstall bundle");
}
return status;
@@ -2186,7 +2187,7 @@ celix_status_t bundleActivator_stop(void
fw_log(FW_LOG_INFO, "FRAMEWORK: Start shutdownthread");
if (apr_thread_create(&shutdownThread, NULL, framework_shutdown, framework, framework->mp) == APR_SUCCESS) {
- apr_thread_detach(shutdownThread);
+ apr_thread_join(&status, shutdownThread);
} else {
fw_log(FW_LOG_ERROR, "Could not create shutdown thread, normal exit not possible.");
status = CELIX_FRAMEWORK_EXCEPTION;