Merge "Fix fd leak in KeepaliveTracker."
This commit is contained in:
@@ -220,6 +220,8 @@ import com.android.server.utils.PriorityDump;
|
|||||||
|
|
||||||
import com.google.android.collect.Lists;
|
import com.google.android.collect.Lists;
|
||||||
|
|
||||||
|
import libcore.io.IoUtils;
|
||||||
|
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
@@ -7504,18 +7506,34 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
public void startNattKeepaliveWithFd(Network network, FileDescriptor fd, int resourceId,
|
public void startNattKeepaliveWithFd(Network network, FileDescriptor fd, int resourceId,
|
||||||
int intervalSeconds, ISocketKeepaliveCallback cb, String srcAddr,
|
int intervalSeconds, ISocketKeepaliveCallback cb, String srcAddr,
|
||||||
String dstAddr) {
|
String dstAddr) {
|
||||||
|
try {
|
||||||
mKeepaliveTracker.startNattKeepalive(
|
mKeepaliveTracker.startNattKeepalive(
|
||||||
getNetworkAgentInfoForNetwork(network), fd, resourceId,
|
getNetworkAgentInfoForNetwork(network), fd, resourceId,
|
||||||
intervalSeconds, cb,
|
intervalSeconds, cb,
|
||||||
srcAddr, dstAddr, NattSocketKeepalive.NATT_PORT);
|
srcAddr, dstAddr, NattSocketKeepalive.NATT_PORT);
|
||||||
|
} finally {
|
||||||
|
// FileDescriptors coming from AIDL calls must be manually closed to prevent leaks.
|
||||||
|
// startNattKeepalive calls Os.dup(fd) before returning, so we can close immediately.
|
||||||
|
if (fd != null && Binder.getCallingPid() != Process.myPid()) {
|
||||||
|
IoUtils.closeQuietly(fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startTcpKeepalive(Network network, FileDescriptor fd, int intervalSeconds,
|
public void startTcpKeepalive(Network network, FileDescriptor fd, int intervalSeconds,
|
||||||
ISocketKeepaliveCallback cb) {
|
ISocketKeepaliveCallback cb) {
|
||||||
|
try {
|
||||||
enforceKeepalivePermission();
|
enforceKeepalivePermission();
|
||||||
mKeepaliveTracker.startTcpKeepalive(
|
mKeepaliveTracker.startTcpKeepalive(
|
||||||
getNetworkAgentInfoForNetwork(network), fd, intervalSeconds, cb);
|
getNetworkAgentInfoForNetwork(network), fd, intervalSeconds, cb);
|
||||||
|
} finally {
|
||||||
|
// FileDescriptors coming from AIDL calls must be manually closed to prevent leaks.
|
||||||
|
// startTcpKeepalive calls Os.dup(fd) before returning, so we can close immediately.
|
||||||
|
if (fd != null && Binder.getCallingPid() != Process.myPid()) {
|
||||||
|
IoUtils.closeQuietly(fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user