| Index: chrome/browser/devtools/adb/android_usb_socket.cc
|
| diff --git a/chrome/browser/devtools/adb/android_usb_socket.cc b/chrome/browser/devtools/adb/android_usb_socket.cc
|
| index ee9c9df5674dda237ce4fc83fc653d7859715c20..29b434c72c281af5cdc63500b8eb532fba66f680 100644
|
| --- a/chrome/browser/devtools/adb/android_usb_socket.cc
|
| +++ b/chrome/browser/devtools/adb/android_usb_socket.cc
|
| @@ -41,10 +41,14 @@ AndroidUsbSocket::~AndroidUsbSocket() {
|
| DCHECK(CalledOnValidThread());
|
| if (is_connected_)
|
| Disconnect();
|
| - delete_callback_.Run(local_id_);
|
| + if (!delete_callback_.is_null())
|
| + delete_callback_.Run(local_id_);
|
| }
|
|
|
| void AndroidUsbSocket::HandleIncoming(scoped_refptr<AdbMessage> message) {
|
| + if (!device_)
|
| + return;
|
| +
|
| CHECK_EQ(message->arg1, local_id_);
|
| switch (message->command) {
|
| case AdbMessage::kCommandOKAY:
|
| @@ -79,9 +83,7 @@ void AndroidUsbSocket::HandleIncoming(scoped_refptr<AdbMessage> message) {
|
| case AdbMessage::kCommandCLSE:
|
| if (is_connected_)
|
| device_->Send(AdbMessage::kCommandCLSE, local_id_, 0, "");
|
| - is_connected_ = false;
|
| - is_closed_ = true;
|
| - RespondToReaders(true);
|
| + Terminated();
|
| // "this" can be NULL.
|
| break;
|
| default:
|
| @@ -92,6 +94,13 @@ void AndroidUsbSocket::HandleIncoming(scoped_refptr<AdbMessage> message) {
|
| void AndroidUsbSocket::Terminated() {
|
| is_connected_ = false;
|
| is_closed_ = true;
|
| +
|
| + // Break the socket -> device connection, release the device.
|
| + delete_callback_.Run(local_id_);
|
| + delete_callback_.Reset();
|
| + device_ = NULL;
|
| +
|
| + // Respond to pending callbacks.
|
| if (!connect_callback_.is_null()) {
|
| net::CompletionCallback callback = connect_callback_;
|
| connect_callback_.Reset();
|
| @@ -149,7 +158,7 @@ bool AndroidUsbSocket::SetSendBufferSize(int32 size) {
|
|
|
| int AndroidUsbSocket::Connect(const net::CompletionCallback& callback) {
|
| DCHECK(CalledOnValidThread());
|
| - if (device_->terminated())
|
| + if (!device_)
|
| return net::ERR_FAILED;
|
| connect_callback_ = callback;
|
| device_->Send(AdbMessage::kCommandOPEN, local_id_, 0, command_);
|
| @@ -157,9 +166,10 @@ int AndroidUsbSocket::Connect(const net::CompletionCallback& callback) {
|
| }
|
|
|
| void AndroidUsbSocket::Disconnect() {
|
| - is_connected_ = false;
|
| + if (!device_)
|
| + return;
|
| device_->Send(AdbMessage::kCommandCLSE, local_id_, remote_id_, "");
|
| - RespondToReaders(true);
|
| + Terminated();
|
| }
|
|
|
| bool AndroidUsbSocket::IsConnected() const {
|
|
|