Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1465)

Unified Diff: chrome/browser/devtools/adb/android_usb_socket.cc

Issue 230773003: DevTools: do not retain android_usb_devices in their manager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 {

Powered by Google App Engine
This is Rietveld 408576698