Commit 6724686e authored by pliard@chromium.org's avatar pliard@chromium.org

Fix double free in DeviceController (forwarder2).

This happened in an error code path rarely exercised which is why it didn't
show up very often.

BUG=332403
R=bulach@chromium.org

Review URL: https://codereview.chromium.org/132053003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@244149 0039d316-1c4b-4281-b951-d872f2087c98
parent 491af3c6
...@@ -141,17 +141,18 @@ void DeviceController::AcceptHostCommandInternal() { ...@@ -141,17 +141,18 @@ void DeviceController::AcceptHostCommandInternal() {
void DeviceController::DeleteListenerOnError( void DeviceController::DeleteListenerOnError(
const base::WeakPtr<DeviceController>& device_controller_ptr, const base::WeakPtr<DeviceController>& device_controller_ptr,
scoped_ptr<DeviceListener> device_listener) { scoped_ptr<DeviceListener> device_listener) {
DeviceListener* const listener = device_listener.release();
DeviceController* const controller = device_controller_ptr.get(); DeviceController* const controller = device_controller_ptr.get();
if (!controller) { if (!controller) {
// |device_listener| was already deleted by the controller that did have // |listener| was already deleted by the controller that did have its
// its ownership. // ownership.
ignore_result(device_listener.release());
return; return;
} }
DCHECK(controller->construction_task_runner_->RunsTasksOnCurrentThread()); DCHECK(controller->construction_task_runner_->RunsTasksOnCurrentThread());
bool listener_did_exist = DeleteRefCountedValueInMap( bool listener_did_exist = DeleteRefCountedValueInMap(
device_listener->listener_port(), &controller->listeners_); listener->listener_port(), &controller->listeners_);
DCHECK(listener_did_exist); DCHECK(listener_did_exist);
// Note that |listener| was deleted by DeleteRefCountedValueInMap().
} }
} // namespace forwarder } // namespace forwarder
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment