Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a80c37c authored by Guillaume Jacquart's avatar Guillaume Jacquart
Browse files

Fix localsocket busy on restart

parent 4fe47152
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ android {
        targetSdkVersion 30

        versionCode 1
        versionName "0.5.0"
        versionName "0.5.1"
    }

    buildTypes {
+24 −7
Original line number Diff line number Diff line
@@ -25,6 +25,9 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.system.ErrnoException;
import android.system.Os;
import android.system.OsConstants;
import android.util.Log;

import java.io.BufferedReader;
@@ -60,8 +63,28 @@ public class DNSBlockerRunnable implements Runnable {

	public synchronized void stop() {
		stopped = true;
		closeSocket();
	}

	private void closeSocket() {
		// Known bug and workaround that LocalServerSocket::close is not working well
		// https://issuetracker.google.com/issues/36945762
		if (resolverReceiver != null) {
			try {
				Os.shutdown(resolverReceiver.getFileDescriptor(), OsConstants.SHUT_RDWR);
				resolverReceiver.close();
				resolverReceiver = null;
			} catch (ErrnoException e) {
				if (e.errno != OsConstants.EBADF) {
					Log.w(TAG, "Socket already closed");
				} else {
					Log.e(TAG, "Exception: cannot close DNS port on stop" + SOCKET_NAME + "!" + e.getMessage());
				}
			} catch (Exception e) {
				Log.e(TAG, "Exception: cannot close DNS port on stop" + SOCKET_NAME + "!" + e.getMessage());
			}
		}
	}

	@Override
	public void run() {
@@ -107,15 +130,9 @@ public class DNSBlockerRunnable implements Runnable {
				socket.close();
				// Printing bufferedreader data
			} catch (IOException e) {
				Log.w(TAG, "exception " + e.getMessage());
				Log.w(TAG, "Exception while listening DNS resolver" + e.getMessage());
			}
		}

		try {
			resolverReceiver.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void initEBrowserDoTFix(Context context) {