Fix exit code 143 not handled

This commit is contained in:
Mygod
2018-09-18 17:15:38 +08:00
parent 82ac2e56e7
commit dbbc27485c

View File

@@ -21,12 +21,12 @@ abstract class IpMonitor : Runnable {
private var monitor: Process? = null private var monitor: Process? = null
private var pool: ScheduledExecutorService? = null private var pool: ScheduledExecutorService? = null
private fun handleProcess(builder: ProcessBuilder): Int { private fun handleProcess(builder: ProcessBuilder): Boolean {
val process = try { val process = try {
builder.start() builder.start()
} catch (e: IOException) { } catch (e: IOException) {
e.printStackTrace() e.printStackTrace()
return -1 return false
} }
monitor = process monitor = process
val err = thread("${javaClass.simpleName}-error") { val err = thread("${javaClass.simpleName}-error") {
@@ -47,14 +47,15 @@ abstract class IpMonitor : Runnable {
} }
err.join() err.join()
process.waitFor() process.waitFor()
return process.exitValue() val result = process.exitValue()
return result == 0 || result == 143 // SIGTERM
} }
init { init {
thread("${javaClass.simpleName}-input") { thread("${javaClass.simpleName}-input") {
// monitor may get rejected by SELinux // monitor may get rejected by SELinux
if (handleProcess(ProcessBuilder("ip", "monitor", monitoredObject)) == 0) return@thread if (handleProcess(ProcessBuilder("ip", "monitor", monitoredObject))) return@thread
if (handleProcess(ProcessBuilder("su", "-c", "exec ip monitor $monitoredObject")) == 0) return@thread if (handleProcess(ProcessBuilder("su", "-c", "exec ip monitor $monitoredObject"))) return@thread
Crashlytics.log(Log.WARN, javaClass.simpleName, "Failed to set up monitor, switching to polling") Crashlytics.log(Log.WARN, javaClass.simpleName, "Failed to set up monitor, switching to polling")
Crashlytics.logException(MonitorFailure()) Crashlytics.logException(MonitorFailure())
val pool = Executors.newScheduledThreadPool(1) val pool = Executors.newScheduledThreadPool(1)