pnoltes commented on code in PR #602:
URL: https://github.com/apache/celix/pull/602#discussion_r1282404075


##########
libs/framework/src/celix_bundle_cache.c:
##########
@@ -228,30 +230,26 @@ celix_status_t 
celix_bundleCache_createSystemArchive(celix_framework_t* fw, bund
     return celix_bundleCache_createArchive(fw->cache, 
CELIX_FRAMEWORK_BUNDLE_ID, NULL, archive);
 }
 
-celix_status_t celix_bundleCache_destroyArchive(celix_bundle_cache_t* cache, 
bundle_archive_pt archive, bool permanent) {
-    celix_status_t status = CELIX_SUCCESS;
-    const char* loc = NULL;
+void celix_bundleCache_destroyArchive(celix_bundle_cache_t* cache, 
bundle_archive_pt archive) {
     celixThreadMutex_lock(&cache->mutex);
-    (void) bundleArchive_getLocation(archive, &loc);
-    (void) celix_stringHashMap_remove(cache->locationToBundleIdLookupMap, loc);
-    if (permanent) {
-        status = bundleArchive_closeAndDelete(archive);
+    if (!celix_bundleArchive_isCacheValid(archive)) {
+        const char* loc = NULL;
+        (void) bundleArchive_getLocation(archive, &loc);
+        (void) celix_stringHashMap_remove(cache->locationToBundleIdLookupMap, 
loc);
     }
+    (void)celix_bundleArchive_removeInvalidDirs(archive);
     celixThreadMutex_unlock(&cache->mutex);
-    (void) bundleArchive_destroy(archive);
-    return status;
+    bundleArchive_destroy(archive);
 }
 
 /**
  * Update location->bundle id lookup map.
  */
 static void 
celix_bundleCache_updateIdForLocationLookupMap(celix_bundle_cache_t* cache) {

Review Comment:
   Just noticed that the ` char* bundleStateProperties = 
celix_utils_writeOrCreateString(..)` string at line 261 is never freed with 
`celix_utils_freeStringIfNotEqual`



##########
libs/framework/src/celix_bundle_cache.c:
##########
@@ -276,22 +274,19 @@ static void 
celix_bundleCache_updateIdForLocationLookupMap(celix_bundle_cache_t*
         }
     }
     closedir(dir);
-    celixThreadMutex_unlock(&cache->mutex);
 }
 
 long celix_bundleCache_findBundleIdForLocation(celix_bundle_cache_t* cache, 
const char* location) {
     long bndId = -1;
     celixThreadMutex_lock(&cache->mutex);
+    if (!cache->locationToBundleIdLookupMapLoaded) {
+        celix_bundleCache_updateIdForLocationLookupMap(cache);

Review Comment:
   Yes of course, this is only needed once. 



##########
libs/framework/src/bundle_archive.c:
##########
@@ -97,6 +97,35 @@ static celix_status_t 
celix_bundleArchive_storeBundleStateProperties(bundle_arch
     return CELIX_SUCCESS;
 }
 
+static celix_status_t 
celix_bundleArchive_removeResourceCache(bundle_archive_t* archive) {
+    celix_status_t status = CELIX_SUCCESS;
+    const char* error = NULL;
+    struct stat st;
+    status = lstat(archive->resourceCacheRoot, &st);
+    if (status == -1 && errno == ENOENT) {
+        return CELIX_SUCCESS;
+    } else if(status == -1 && errno != ENOENT) {
+        status = CELIX_ERROR_MAKE(CELIX_FACILITY_CERRNO,errno);
+        fw_logCode(archive->fw->logger, CELIX_LOG_LEVEL_ERROR, status, "Failed 
to stat bundle archive directory '%s'", archive->resourceCacheRoot);
+        return status;
+    }
+    // assert(status == 0);

Review Comment:
   commented-out code



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@celix.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to