From 8d3554c48d4f055654807f617609151cfcc7a81d Mon Sep 17 00:00:00 2001 From: Pazzaz Date: Tue, 14 Aug 2018 20:54:25 +0200 Subject: Don't drop values in other, just move the tail --- src/liballoc/collections/vec_deque.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'src/liballoc') diff --git a/src/liballoc/collections/vec_deque.rs b/src/liballoc/collections/vec_deque.rs index 7f4fbb99c22..b66bb82bc37 100644 --- a/src/liballoc/collections/vec_deque.rs +++ b/src/liballoc/collections/vec_deque.rs @@ -1859,7 +1859,7 @@ impl VecDeque { // Guarantees there is space in `self` for `other`. self.reserve(src_total); - let new_head = { + self.head = { let original_head = self.head; // The goal is to copy all values from `other` into `self`. To avoid any @@ -1988,12 +1988,8 @@ impl VecDeque { } }; - // Up until this point we are in a bad state as some values - // exist in both `self` and `other`. To preserve panic safety - // it is important we clear the old values from `other`... - other.clear(); - // and that we update `head` as the last step, making the values accessible in `self`. - self.head = new_head; + // Some values now exist in both `other` and `self` but are made inaccessible in `other`. + other.tail = other.head; } /// Retains only the elements specified by the predicate. -- cgit 1.4.1-3-g733a5