Actually close sockets when stopping the receive thread.
Contrary to the expectations of the code, IoUtils.closeQuietly() does not unblock system calls. So mReceiveThread.halt() was not actually stopping the receive thread. This wasn't actually a problem, because after "stopping" the receive thread, either the interface would go down (interrupting the previous receive thread with ENETDOWN), or a packet would arrive to both the old and new receive threads, stopping the old one. But the lack of a "stopping receive thread" message at the expected time was confusing. While I'm at it, also add the string for CMD_TIMEOUT. Bug: 19704592 Change-Id: I74732429118af780453028898148519b294fa9d3
This commit is contained in:
@@ -58,7 +58,7 @@ import java.nio.ByteBuffer;
|
||||
import java.util.Arrays;
|
||||
import java.util.Random;
|
||||
|
||||
import libcore.io.IoUtils;
|
||||
import libcore.io.IoBridge;
|
||||
|
||||
import static android.system.OsConstants.*;
|
||||
import static android.net.dhcp.DhcpPacket.*;
|
||||
@@ -297,9 +297,15 @@ public class DhcpClient extends BaseDhcpStateMachine {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void closeQuietly(FileDescriptor fd) {
|
||||
try {
|
||||
IoBridge.closeAndSignalBlockedThreads(fd);
|
||||
} catch (IOException ignored) {}
|
||||
}
|
||||
|
||||
private void closeSockets() {
|
||||
IoUtils.closeQuietly(mUdpSock);
|
||||
IoUtils.closeQuietly(mPacketSock);
|
||||
closeQuietly(mUdpSock);
|
||||
closeQuietly(mPacketSock);
|
||||
}
|
||||
|
||||
private boolean setIpAddress(LinkAddress address) {
|
||||
@@ -326,7 +332,7 @@ public class DhcpClient extends BaseDhcpStateMachine {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
maybeLog("Starting receive thread");
|
||||
maybeLog("Receive thread started");
|
||||
while (!stopped) {
|
||||
try {
|
||||
int length = Os.read(mPacketSock, mPacket, 0, mPacket.length);
|
||||
@@ -345,7 +351,7 @@ public class DhcpClient extends BaseDhcpStateMachine {
|
||||
}
|
||||
}
|
||||
}
|
||||
maybeLog("Stopping receive thread");
|
||||
maybeLog("Receive thread stopped");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -463,6 +469,8 @@ public class DhcpClient extends BaseDhcpStateMachine {
|
||||
return "CMD_KICK";
|
||||
case CMD_RECEIVED_PACKET:
|
||||
return "CMD_RECEIVED_PACKET";
|
||||
case CMD_TIMEOUT:
|
||||
return "CMD_TIMEOUT";
|
||||
default:
|
||||
return Integer.toString(what);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user