This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/refactor_bundle_cache in repository https://gitbox.apache.org/repos/asf/celix.git
The following commit(s) were added to refs/heads/feature/refactor_bundle_cache by this push: new 3882af52 Fix some small race conditions, mem leaks and commented out code 3882af52 is described below commit 3882af528807b6821d6f8f903216d7fd3777d46e Author: Pepijn Noltes <pepijnnol...@gmail.com> AuthorDate: Thu Mar 30 15:41:03 2023 +0200 Fix some small race conditions, mem leaks and commented out code --- libs/framework/src/bundle.c | 8 ++------ libs/framework/src/bundle_archive.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/libs/framework/src/bundle.c b/libs/framework/src/bundle.c index 295ccc53..2d7876aa 100644 --- a/libs/framework/src/bundle.c +++ b/libs/framework/src/bundle.c @@ -64,6 +64,7 @@ celix_status_t celix_bundle_createFromArchive(celix_framework_t *framework, bund if (bundle->modules == NULL) { status = CELIX_ENOMEM; fw_logCode(framework->logger, CELIX_LOG_LEVEL_ERROR, status, "Cannot create bundle from archive, out of memory."); + free(bundle); return status; } @@ -303,11 +304,6 @@ celix_status_t bundle_revise(bundle_pt bundle, const char * location, const char return status; } -//bool bundle_rollbackRevise(bundle_pt bundle) { -// module_pt module = arrayList_remove(bundle->modules, arrayList_set(bundle->modules) - 1); -// return resolver_removeModule(module); -//} - celix_status_t bundle_addModule(bundle_pt bundle, module_pt module) { celix_arrayList_add(bundle->modules, module); resolver_addModule(module); @@ -355,7 +351,7 @@ celix_status_t bundle_isSystemBundle(const_bundle_pt bundle, bool *systemBundle) } celix_status_t bundle_close(const_bundle_pt bundle) { - fw_log(bundle->framework->logger, CELIX_LOG_LEVEL_DEBUG, "Usage of bundle_close is deprecated. Called for bundle %s", bundle->symbolicName); + fw_log(bundle->framework->logger, CELIX_LOG_LEVEL_DEBUG, "Usage of bundle_close is deprecated and no longer needed. Called for bundle %s", bundle->symbolicName); return CELIX_SUCCESS; } diff --git a/libs/framework/src/bundle_archive.c b/libs/framework/src/bundle_archive.c index 1a8b1114..65f61d73 100644 --- a/libs/framework/src/bundle_archive.c +++ b/libs/framework/src/bundle_archive.c @@ -315,7 +315,9 @@ const char* celix_bundleArchive_getSymbolicName(bundle_archive_pt archive) { } celix_status_t bundleArchive_getLocation(bundle_archive_pt archive, const char **location) { + celixThreadMutex_lock(&archive->lock); *location = archive->location; + celixThreadMutex_unlock(&archive->lock); return CELIX_SUCCESS; } @@ -330,7 +332,9 @@ celix_status_t bundleArchive_getCurrentRevisionNumber(bundle_archive_pt archive, } celix_status_t bundleArchive_getCurrentRevision(bundle_archive_pt archive, bundle_revision_pt *revision) { + celixThreadMutex_lock(&archive->lock); *revision = archive->revision; + celixThreadMutex_unlock(&archive->lock); return CELIX_SUCCESS; } @@ -388,7 +392,12 @@ celix_status_t celix_bundleArchive_getLastModified(bundle_archive_pt archive, st } celix_status_t bundleArchive_setLastModified(bundle_archive_pt archive __attribute__((unused)), time_t lastModifiedTime __attribute__((unused))) { - return celix_utils_touch(archive->archiveRoot); + celix_status_t status = CELIX_SUCCESS; + char manifestPathBuffer[CELIX_DEFAULT_STRING_CREATE_BUFFER_SIZE]; + char* manifestPath = celix_utils_writeOrCreateString(manifestPathBuffer, sizeof(manifestPathBuffer), "%s/%s", archive->resourceCacheRoot, CELIX_BUNDLE_MANIFEST_REL_PATH); + status = celix_utils_touch(manifestPath); + celix_utils_freeStringIfNotEqual(manifestPathBuffer, manifestPath); + return status; } celix_status_t bundleArchive_revise(bundle_archive_pt archive, const char * location __attribute__((unused)), const char *updatedBundleUrl) {