Remove file socket on thread finishes

This commit is contained in:
Mygod
2017-12-06 16:22:18 -08:00
parent b808920e6c
commit 8c55630e9b
@@ -42,24 +42,28 @@ abstract class LocalSocketListener(protected val tag: String) : Thread() {
*/
protected abstract fun accept(socket: LocalSocket)
override fun run() {
while (!socketFile.delete()) Thread.sleep(100)
try {
val localSocket = LocalSocket()
localSocket.bind(LocalSocketAddress(socketFile.absolutePath, LocalSocketAddress.Namespace.FILESYSTEM))
serverSocket.set(LocalServerSocket(localSocket.fileDescriptor))
} catch (e: IOException) {
Log.e(tag, "unable to bind", e)
return
}
while (true) {
val serverSocket = serverSocket.get() ?: return
while (!socketFile.delete()) Thread.sleep(100)
try {
serverSocket.accept()
val localSocket = LocalSocket()
localSocket.bind(LocalSocketAddress(socketFile.absolutePath, LocalSocketAddress.Namespace.FILESYSTEM))
serverSocket.set(LocalServerSocket(localSocket.fileDescriptor))
} catch (e: IOException) {
Log.e(tag, "Error when accept socket", e)
app.track(e)
null
}?.use(this::accept)
Log.e(tag, "unable to bind", e)
return
}
while (true) {
val serverSocket = serverSocket.get() ?: return
try {
serverSocket.accept()
} catch (e: IOException) {
Log.e(tag, "Error when accept socket", e)
app.track(e)
null
}?.use(this::accept)
}
} finally {
stopThread()
}
}
@@ -67,6 +71,7 @@ abstract class LocalSocketListener(protected val tag: String) : Thread() {
val old = serverSocket.getAndSet(null) ?: return
try {
old.close()
if (!socketFile.delete()) socketFile.deleteOnExit()
} catch (_: Exception) { } // ignore
}
}