PengZheng opened a new issue, #556:
URL: https://github.com/apache/celix/issues/556

   The behavior of the `uninstall()` method of Bundle interface is specified as 
follows: 
   
   > To whatever extent possible, the Framework must remove any resources 
related to the bundle. This method must always uninstall the bundle from the 
persistent storage of the Framework.
   
   Clearly, the current implementation, which is introduced by #476, does not 
touch persistent storage.
   As seen in `TEST_F(CxxBundleArchiveTestSuite, BundleArchiveReusedTest)`, 
after uninstall, the bundle archive is intact.
   #554 tries to fix this, but fails to take `celix_bundleCache`, which assumes 
that "bundle cache dirs are not removed" (see 
`celix_bundleCache_updateIdForLocationLookupMap`), into account, and thus is 
withdrawn in #555.
   
   Also note that there are a condition in current implementation of 
`celix_framework_installBundle` and `celix_framework_installBundleAsync`: if 
the same bundle are installed concurrently from multiple threads, it can happen 
that multiple copies of the same bundle will be installed into the bundle cache 
with different bundle ids.
   
   ```C
           long alreadyExistingBndId = 
celix_bundleCache_findBundleIdForLocation(framework, bndLoc);
           //FIXME: first check then do
           long id = alreadyExistingBndId == -1 ? 
framework_getNextBundleId(framework) : alreadyExistingBndId;
           bundle_archive_t* archive = NULL;
           status = CELIX_DO_IF(status, 
celix_bundleCache_createArchive(framework, id, bndLoc, &archive));
   ```
   
   Any future fix should also address the thread safety issue.


-- 
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.apache.org

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

Reply via email to