Martin Desruisseaux created SIS-627:
---------------------------------------

             Summary: JVM crash if two or more `GDALStoreProvider` are created 
with explicit path to GDAL native library
                 Key: SIS-627
                 URL: https://issues.apache.org/jira/browse/SIS-627
             Project: Spatial Information Systems
          Issue Type: Bug
          Components: Storage
    Affects Versions: 1.6
            Reporter: Martin Desruisseaux
            Assignee: Martin Desruisseaux
             Fix For: 1.7


{{GDALStoreProvider}} has two constructors: a default constructor using the 
GDAL library found by the Operating System, and another constructor where the 
user can specify explicitly the path to the GDAL native library. Usually, only 
one {{GDALStoreProvier}} should be created in a JVM. But we do not forbid the 
creation of more instances. However, if two {{GDALStoreProvider}} are created 
for the same GDAL library, the C function {{GDALDestroy(void)}} is invoked when 
the first provider is garbage-collected, which causes a JVM crash when the 
second provider, which is still alive, invokes a GDAL function.

The easiest fix is to ensure that we never have two instances of 
{{GDALStoreProvider}} for the same GDAL native library, where the library is 
identified by the inode of the {{libgdal.so}} file (or equivalent file on 
non-POSIX systems). If a second request is made for the same file, the existing 
provider shall be returned instead of returning a new one.

This strategy requires that we remove the {{GDALStoreProvider(Path)}} 
constructor, replaced by a static method. This is an incompatible change, but 
avoiding a JVM crash is a reason good enough.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to