Merge "Fix crash when incrementing data usage request" into tm-dev
This commit is contained in:
@@ -192,10 +192,13 @@ public class MultipathPolicyTracker {
|
|||||||
private final int mSubId;
|
private final int mSubId;
|
||||||
|
|
||||||
private long mQuota;
|
private long mQuota;
|
||||||
/** Current multipath budget. Nonzero iff we have budget and a UsageCallback is armed. */
|
/** Current multipath budget. Nonzero iff we have budget. */
|
||||||
private long mMultipathBudget;
|
// The budget could be accessed by multiple threads, make it volatile to ensure the callers
|
||||||
|
// on a different thread will not see the stale value.
|
||||||
|
private volatile long mMultipathBudget;
|
||||||
private final NetworkTemplate mNetworkTemplate;
|
private final NetworkTemplate mNetworkTemplate;
|
||||||
private final UsageCallback mUsageCallback;
|
private final UsageCallback mUsageCallback;
|
||||||
|
private boolean mUsageCallbackRegistered = false;
|
||||||
private NetworkCapabilities mNetworkCapabilities;
|
private NetworkCapabilities mNetworkCapabilities;
|
||||||
private final NetworkStatsManager mStatsManager;
|
private final NetworkStatsManager mStatsManager;
|
||||||
|
|
||||||
@@ -234,7 +237,6 @@ public class MultipathPolicyTracker {
|
|||||||
@Override
|
@Override
|
||||||
public void onThresholdReached(int networkType, String subscriberId) {
|
public void onThresholdReached(int networkType, String subscriberId) {
|
||||||
if (DBG) Log.d(TAG, "onThresholdReached for network " + network);
|
if (DBG) Log.d(TAG, "onThresholdReached for network " + network);
|
||||||
mMultipathBudget = 0;
|
|
||||||
updateMultipathBudget();
|
updateMultipathBudget();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -376,9 +378,9 @@ public class MultipathPolicyTracker {
|
|||||||
if (DBG) {
|
if (DBG) {
|
||||||
Log.d(TAG, "Setting callback for " + budget + " bytes on network " + network);
|
Log.d(TAG, "Setting callback for " + budget + " bytes on network " + network);
|
||||||
}
|
}
|
||||||
registerUsageCallback(budget);
|
setMultipathBudget(budget);
|
||||||
} else {
|
} else {
|
||||||
maybeUnregisterUsageCallback();
|
clearMultipathBudget();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -403,23 +405,30 @@ public class MultipathPolicyTracker {
|
|||||||
return mMultipathBudget > 0;
|
return mMultipathBudget > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerUsageCallback(long budget) {
|
// Sets the budget and registers a usage callback for it.
|
||||||
|
private void setMultipathBudget(long budget) {
|
||||||
maybeUnregisterUsageCallback();
|
maybeUnregisterUsageCallback();
|
||||||
|
if (DBG) Log.d(TAG, "Registering callback, budget is " + mMultipathBudget);
|
||||||
mStatsManager.registerUsageCallback(mNetworkTemplate, budget,
|
mStatsManager.registerUsageCallback(mNetworkTemplate, budget,
|
||||||
(command) -> mHandler.post(command), mUsageCallback);
|
(command) -> mHandler.post(command), mUsageCallback);
|
||||||
|
mUsageCallbackRegistered = true;
|
||||||
mMultipathBudget = budget;
|
mMultipathBudget = budget;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void maybeUnregisterUsageCallback() {
|
private void maybeUnregisterUsageCallback() {
|
||||||
if (haveMultipathBudget()) {
|
if (!mUsageCallbackRegistered) return;
|
||||||
if (DBG) Log.d(TAG, "Unregistering callback, budget was " + mMultipathBudget);
|
if (DBG) Log.d(TAG, "Unregistering callback, budget was " + mMultipathBudget);
|
||||||
mStatsManager.unregisterUsageCallback(mUsageCallback);
|
mStatsManager.unregisterUsageCallback(mUsageCallback);
|
||||||
mMultipathBudget = 0;
|
mUsageCallbackRegistered = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void clearMultipathBudget() {
|
||||||
|
maybeUnregisterUsageCallback();
|
||||||
|
mMultipathBudget = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void shutdown() {
|
void shutdown() {
|
||||||
maybeUnregisterUsageCallback();
|
clearMultipathBudget();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user