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

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: Review comments addressed. 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
« no previous file with comments | « chrome/browser/devtools/adb/android_usb_socket.h ('k') | chrome/browser/devtools/android_device.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 16cc69bee3e15d73f66ca6b7fdb39749a09df988..77d24c9684b744dd20ff68bdfc634bff4c46fc79 100644
--- a/chrome/browser/devtools/adb/android_usb_socket.cc
+++ b/chrome/browser/devtools/adb/android_usb_socket.cc
@@ -33,18 +33,21 @@ AndroidUsbSocket::AndroidUsbSocket(scoped_refptr<AndroidUsbDevice> device,
delete_callback_(delete_callback),
local_id_(socket_id),
remote_id_(0),
- is_connected_(false),
- is_closed_(false) {
+ is_connected_(false) {
}
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 +82,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:
@@ -91,7 +92,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();
@@ -106,7 +113,7 @@ int AndroidUsbSocket::Read(net::IOBuffer* buffer,
int length,
const net::CompletionCallback& callback) {
if (!is_connected_)
- return is_closed_ ? 0 : net::ERR_SOCKET_NOT_CONNECTED;
+ return device_ ? net::ERR_SOCKET_NOT_CONNECTED : 0;
if (read_buffer_.empty()) {
read_requests_.push_back(IORequest(buffer, length, callback));
@@ -149,7 +156,7 @@ int 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 +164,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 {
« no previous file with comments | « chrome/browser/devtools/adb/android_usb_socket.h ('k') | chrome/browser/devtools/android_device.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698