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

Unified Diff: ui/base/gestures/gesture_recognizer_impl.cc

Issue 10826117: Fix memory leak in ~GestureRecognizerImpl (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 5 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: ui/base/gestures/gesture_recognizer_impl.cc
diff --git a/ui/base/gestures/gesture_recognizer_impl.cc b/ui/base/gestures/gesture_recognizer_impl.cc
index 20b88d4a437d7344bf02e38dda8e1e79847132f5..eade930d3e4e25d83d8c08153fc60318bf8657ea 100644
--- a/ui/base/gestures/gesture_recognizer_impl.cc
+++ b/ui/base/gestures/gesture_recognizer_impl.cc
@@ -137,6 +137,16 @@ void TransferConsumer(GestureConsumer* current_consumer,
}
}
+template <typename T>
+void TransferConsumer(GestureConsumer* current_consumer,
+ GestureConsumer* new_consumer,
+ std::map<GestureConsumer*, scoped_ptr<T>>* map) {
+ if (map->count(current_consumer)) {
+ (*map)[new_consumer].swap((*map)[current_consumer]);
+ map->erase(current_consumer);
girard 2012/08/02 17:14:20 Partial template specialization (from generic Tran
+ }
+}
+
void RemoveConsumerFromMap(GestureConsumer* consumer,
GestureRecognizerImpl::TouchIdToConsumerMap* map) {
for (GestureRecognizerImpl::TouchIdToConsumerMap::iterator i = map->begin();
@@ -191,7 +201,7 @@ GestureConsumer* GestureRecognizerImpl::GetTargetForLocation(
const gfx::Point& location) {
const GesturePoint* closest_point = NULL;
int closest_distance_squared = 0;
- std::map<GestureConsumer*, GestureSequence*>::iterator i;
+ std::map<GestureConsumer*, scoped_ptr<GestureSequence>>::iterator i;
for (i = consumer_sequence_.begin(); i != consumer_sequence_.end(); ++i) {
const GesturePoint* points = i->second->points();
for (int j = 0; j < GestureSequence::kMaxGesturePoints; ++j) {
@@ -268,10 +278,10 @@ GestureSequence* GestureRecognizerImpl::CreateSequence(
GestureSequence* GestureRecognizerImpl::GetGestureSequenceForConsumer(
GestureConsumer* consumer) {
- GestureSequence* gesture_sequence = consumer_sequence_[consumer];
+ GestureSequence* gesture_sequence = consumer_sequence_[consumer].get();
if (!gesture_sequence) {
gesture_sequence = CreateSequence(helper_);
- consumer_sequence_[consumer] = gesture_sequence;
+ consumer_sequence_[consumer].reset(gesture_sequence);
}
return gesture_sequence;
}
@@ -327,10 +337,8 @@ GestureSequence::Gestures* GestureRecognizerImpl::AdvanceTouchQueue(
}
void GestureRecognizerImpl::FlushTouchQueue(GestureConsumer* consumer) {
- if (consumer_sequence_.count(consumer)) {
- delete consumer_sequence_[consumer];
+ if (consumer_sequence_.count(consumer))
consumer_sequence_.erase(consumer);
- }
if (event_queue_.count(consumer)) {
delete event_queue_[consumer];
« ui/base/gestures/gesture_recognizer_impl.h ('K') | « ui/base/gestures/gesture_recognizer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698