From 045f9f50c32f850498af794f0c9f23eb1196476d Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 20 Sep 2018 11:28:12 +0200 Subject: [PATCH] Prevent crash when startService is called but service is already running --- AndroidManifest.xml | 3 +-- src/android/org/linphone/LinphoneManager.java | 3 ++- src/android/org/linphone/LinphoneService.java | 5 +++++ src/android/org/linphone/receivers/BootReceiver.java | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index ca465a155..4c254828b 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -200,8 +200,7 @@ + android:label="@string/service_name"/> diff --git a/src/android/org/linphone/LinphoneManager.java b/src/android/org/linphone/LinphoneManager.java index b5ecb51d5..374919686 100644 --- a/src/android/org/linphone/LinphoneManager.java +++ b/src/android/org/linphone/LinphoneManager.java @@ -995,9 +995,10 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou public static synchronized void destroy() { if (instance == null) return; - getInstance().changeStatusToOffline(); + instance.changeStatusToOffline(); sExited = true; instance.destroyCore(); + instance = null; } private String getString(int key) { diff --git a/src/android/org/linphone/LinphoneService.java b/src/android/org/linphone/LinphoneService.java index 6ab15a0ca..327f0fb11 100644 --- a/src/android/org/linphone/LinphoneService.java +++ b/src/android/org/linphone/LinphoneService.java @@ -310,6 +310,11 @@ public final class LinphoneService extends Service { public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); + if (instance != null) { + Log.w("Attempt to start the LinphoneService but it is already running !"); + return START_REDELIVER_INTENT; + } + LinphoneManager.createAndStart(LinphoneService.this); instance = this; // instance is ready once linphone manager has been created diff --git a/src/android/org/linphone/receivers/BootReceiver.java b/src/android/org/linphone/receivers/BootReceiver.java index a16aff922..66a34b5cb 100644 --- a/src/android/org/linphone/receivers/BootReceiver.java +++ b/src/android/org/linphone/receivers/BootReceiver.java @@ -39,7 +39,7 @@ public class BootReceiver extends BroadcastReceiver { } else { boolean autostart = LinphonePreferences.instance().isAutoStartEnabled(); android.util.Log.i("LinphoneBootReceiver", "Device is starting, auto_start is " + autostart); - if (autostart) { + if (autostart && !LinphoneService.isReady()) { Intent lLinphoneServiceIntent = new Intent(Intent.ACTION_MAIN); lLinphoneServiceIntent.setClass(context, LinphoneService.class); lLinphoneServiceIntent.putExtra("ForceStartForeground", true);