From 8b20a9288055da0558b58bb6f5918bcf48ec7df9 Mon Sep 17 00:00:00 2001
From: Tobrun
Date: Mon, 18 Nov 2019 07:22:50 +0100
Subject: [PATCH] [libaryloader] synchronise access to the library loader load
method (#58)
---
CHANGELOG.md | 4 ++++
.../src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java | 4 ++--
.../mapboxsdk/module/loader/LibraryLoaderProviderImpl.java | 5 +++--
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index be9bb97ea..7ffaeaead 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
Mapbox welcomes participation and contributions from everyone. If you'd like to do so please see the [`Contributing Guide`](https://github.com/mapbox/mapbox-gl-native/blob/master/CONTRIBUTING.md) first to get started.
+## Master
+### Bugs
+ - Synchronise LibaryLoader#loadLibrary to avoid race conditions resulting in UnsatisfiedLinkError [#58](https://github.com/mapbox/mapbox-gl-native-android/pull/58)
+
## 8.6.0-alpha.1 - November 14, 2019
[Changes](https://github.com/mapbox/mapbox-gl-native-android/compare/android-v8.5.0...android-v8.6.0-alpha.1) since [Mapbox Maps SDK for Android v8.5.0](https://github.com/mapbox/mapbox-gl-native-android/releases/tag/android-v8.5.0):
### Features
diff --git a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java
index ee9f4b3b6..96e97a850 100644
--- a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java
+++ b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/LibraryLoader.java
@@ -5,7 +5,7 @@ import com.mapbox.mapboxsdk.log.Logger;
/**
* Loads the mapbox-gl shared library
*
- * By default uses the {@link System#loadLibrary(String)},
+ * By default uses SoLoader from https://github.com/facebook/SoLoader
* use {@link #setLibraryLoader(LibraryLoader)} to provide an alternative library loading hook.
*
*/
@@ -36,7 +36,7 @@ public abstract class LibraryLoader {
* Catches UnsatisfiedLinkErrors and prints a warning to logcat.
*
*/
- public static void load() {
+ public static synchronized void load() {
try {
if (!loaded) {
loaded = true;
diff --git a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/loader/LibraryLoaderProviderImpl.java b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/loader/LibraryLoaderProviderImpl.java
index 9e5e72d40..b5c03d6b9 100644
--- a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/loader/LibraryLoaderProviderImpl.java
+++ b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/loader/LibraryLoaderProviderImpl.java
@@ -12,7 +12,7 @@ import static com.facebook.soloader.SoLoader.loadLibrary;
/**
* Concrete implementation of a native library loader.
*
- * Uses ReLinker from https://github.com/KeepSafe/ReLinker.
+ * Uses SoLoader from https://github.com/facebook/SoLoader.
*
*/
public class LibraryLoaderProviderImpl implements LibraryLoaderProvider {
@@ -28,7 +28,7 @@ public class LibraryLoaderProviderImpl implements LibraryLoaderProvider {
}
/**
- * Concrete implementation of a LibraryLoader using ReLinker.
+ * Concrete implementation of a LibraryLoader using SoLoader.
*/
private static class SoLibraryLoader extends LibraryLoader {
@@ -43,6 +43,7 @@ public class LibraryLoaderProviderImpl implements LibraryLoaderProvider {
} catch (MapboxConfigurationException exception) {
Logger.e(TAG, "Couldn't load so file with relinker, application context missing, "
+ "call Mapbox.getInstance(Context context, String accessToken) first");
+ throw new UnsatisfiedLinkError(exception.getMessage());
}
}
}