You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Carsten Ziegeler (Jira)" <ji...@apache.org> on 2021/12/21 14:38:00 UTC

[jira] [Updated] (SLING-11030) OSGiServiceInjector.getService() calls ungetService even if service is not get

     [ https://issues.apache.org/jira/browse/SLING-11030?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Carsten Ziegeler updated SLING-11030:
-------------------------------------
    Description: 
The getService method gets all service references, but only from one of them it gets the service. However all service references are passed in to the callback for disposal. So for all references an unget is called, although it happened only for one

In addition, the code is assuming that the service with the highest ranking is always gettable. A null check is missing at : https://github.com/apache/sling-org-apache-sling-models-impl/blob/89fcb8702e29ad3322ee2a023ae6b24e5d2f83ab/src/main/java/org/apache/sling/models/impl/injectors/OSGiServiceInjector.java#L114 
It would be better to loop over the services references until one returns non null and then only dispose that reference later

  was:The getService method gets all service references, but only from one of them it gets the service. However all service references are passed in to the callback for disposal. So for all references an unget is called, although it happened only for one


> OSGiServiceInjector.getService() calls ungetService even if service is not get
> ------------------------------------------------------------------------------
>
>                 Key: SLING-11030
>                 URL: https://issues.apache.org/jira/browse/SLING-11030
>             Project: Sling
>          Issue Type: Bug
>          Components: Sling Models
>    Affects Versions: Models Implementation 1.5.0
>            Reporter: Carsten Ziegeler
>            Priority: Major
>             Fix For: Models Implementation 1.5.2
>
>
> The getService method gets all service references, but only from one of them it gets the service. However all service references are passed in to the callback for disposal. So for all references an unget is called, although it happened only for one
> In addition, the code is assuming that the service with the highest ranking is always gettable. A null check is missing at : https://github.com/apache/sling-org-apache-sling-models-impl/blob/89fcb8702e29ad3322ee2a023ae6b24e5d2f83ab/src/main/java/org/apache/sling/models/impl/injectors/OSGiServiceInjector.java#L114 
> It would be better to loop over the services references until one returns non null and then only dispose that reference later



--
This message was sent by Atlassian Jira
(v8.20.1#820001)