Fix TooManyRequestsException with NetworkCallbacks

On multiple capture start/stop, a TooManyRequestsException could be
thrown because the registered NetworkCallback was not unregistered,
causing leaks
This commit is contained in:
emanuele-f 2022-08-13 11:10:52 +02:00
parent a9a06a6f3f
commit 42c9ec389e

View File

@ -545,6 +545,8 @@ public class CaptureService extends VpnService implements Runnable {
// after the capture is stopped
//INSTANCE = null;
unregisterNetworkCallbacks();
if(mCaptureThread != null)
mCaptureThread.interrupt();
if(mBlacklistsUpdateThread != null)
@ -702,6 +704,7 @@ public class CaptureService extends VpnService implements Runnable {
};
try {
Log.d(TAG, "registerNetworkCallback");
cm.registerNetworkCallback(
new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build(),
@ -721,6 +724,7 @@ public class CaptureService extends VpnService implements Runnable {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Service.CONNECTIVITY_SERVICE);
try {
Log.d(TAG, "unregisterNetworkCallback");
cm.unregisterNetworkCallback(mNetworkCallback);
} catch(IllegalArgumentException e) {
Log.w(TAG, "unregisterNetworkCallback failed: " + e);