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

Side by Side Diff: base/memory/weak_ptr_unittest.cc

Issue 15797010: Fix leak in WeakPtrTest::NonOwnerThreadCanCopyAndAssignWeakPtr{,Base} (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/memory/weak_ptr.h" 5 #include "base/memory/weak_ptr.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/debug/leak_annotations.h" 10 #include "base/debug/leak_annotations.h"
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 { 425 {
426 Target target; 426 Target target;
427 Arrow arrow; 427 Arrow arrow;
428 arrow.target = target.AsWeakPtr(); 428 arrow.target = target.AsWeakPtr();
429 background.CreateArrowFromArrow(&arrow_copy, &arrow); 429 background.CreateArrowFromArrow(&arrow_copy, &arrow);
430 } 430 }
431 EXPECT_EQ(NULL, arrow_copy->target.get()); 431 EXPECT_EQ(NULL, arrow_copy->target.get());
432 background.DeleteArrow(arrow_copy); 432 background.DeleteArrow(arrow_copy);
433 } 433 }
434 434
435 TEST(WeakPtrTest, NonOwnerThreadCanCopyAndAssignWeakPtr) {
436 // Main thread creates a Target object.
437 Target target;
438 // Main thread creates an arrow referencing the Target.
439 Arrow *arrow;
440 {
441 ANNOTATE_SCOPED_MEMORY_LEAK;
442 arrow = new Arrow();
443 arrow->target = target.AsWeakPtr();
444 }
445 // Background can copy and assign arrow (as well as the WeakPtr inside).
446 BackgroundThread background;
447 background.Start();
448 background.CopyAndAssignArrow(arrow);
449 }
450
451 TEST(WeakPtrTest, NonOwnerThreadCanCopyAndAssignWeakPtrBase) {
452 // Main thread creates a Target object.
453 Target target;
454 // Main thread creates an arrow referencing the Target.
455 Arrow *arrow;
456 {
457 ANNOTATE_SCOPED_MEMORY_LEAK;
458 arrow = new Arrow();
459 arrow->target = target.AsWeakPtr();
460 }
461 // Background can copy and assign arrow's WeakPtr to a base class WeakPtr.
462 BackgroundThread background;
463 background.Start();
464 background.CopyAndAssignArrowBase(arrow);
465 }
466
467 TEST(WeakPtrTest, NonOwnerThreadCanDeleteWeakPtr) { 435 TEST(WeakPtrTest, NonOwnerThreadCanDeleteWeakPtr) {
468 // Main thread creates a Target object. 436 // Main thread creates a Target object.
469 Target target; 437 Target target;
470 // Main thread creates an arrow referencing the Target. 438 // Main thread creates an arrow referencing the Target.
471 Arrow* arrow = new Arrow(); 439 Arrow* arrow = new Arrow();
472 arrow->target = target.AsWeakPtr(); 440 arrow->target = target.AsWeakPtr();
473 441
474 // Background can delete arrow (as well as the WeakPtr inside). 442 // Background can delete arrow (as well as the WeakPtr inside).
475 BackgroundThread background; 443 BackgroundThread background;
476 background.Start(); 444 background.Start();
477 background.DeleteArrow(arrow); 445 background.DeleteArrow(arrow);
478 } 446 }
479 447
448 TEST(WeakPtrTest, NonOwnerThreadCanCopyAndAssignWeakPtr) {
jar (doing other things) 2013/06/10 03:32:41 Why did you move the two test methods down (below
akalin 2013/06/10 17:58:21 I think that's the logical order of the tests, sin
449 // Main thread creates a Target object.
450 Target target;
451 // Main thread creates an arrow referencing the Target.
452 Arrow *arrow = new Arrow();
453 arrow->target = target.AsWeakPtr();
454
455 // Background can copy and assign arrow (as well as the WeakPtr inside).
456 BackgroundThread background;
457 background.Start();
458 background.CopyAndAssignArrow(arrow);
459 background.DeleteArrow(arrow);
460 }
461
462 TEST(WeakPtrTest, NonOwnerThreadCanCopyAndAssignWeakPtrBase) {
463 // Main thread creates a Target object.
464 Target target;
465 // Main thread creates an arrow referencing the Target.
466 Arrow *arrow = new Arrow();
467 arrow->target = target.AsWeakPtr();
468
469 // Background can copy and assign arrow's WeakPtr to a base class WeakPtr.
470 BackgroundThread background;
471 background.Start();
472 background.CopyAndAssignArrowBase(arrow);
473 background.DeleteArrow(arrow);
474 }
475
480 #if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) && GTEST_HAS_DEATH_TEST 476 #if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) && GTEST_HAS_DEATH_TEST
481 477
482 TEST(WeakPtrDeathTest, WeakPtrCopyDoesNotChangeThreadBinding) { 478 TEST(WeakPtrDeathTest, WeakPtrCopyDoesNotChangeThreadBinding) {
483 // The default style "fast" does not support multi-threaded tests 479 // The default style "fast" does not support multi-threaded tests
484 // (introduces deadlock on Linux). 480 // (introduces deadlock on Linux).
485 ::testing::FLAGS_gtest_death_test_style = "threadsafe"; 481 ::testing::FLAGS_gtest_death_test_style = "threadsafe";
486 482
487 BackgroundThread background; 483 BackgroundThread background;
488 background.Start(); 484 background.Start();
489 485
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 background.Start(); 582 background.Start();
587 background.DeleteTarget(target.release()); 583 background.DeleteTarget(target.release());
588 584
589 // Main thread attempts to dereference the target, violating thread binding. 585 // Main thread attempts to dereference the target, violating thread binding.
590 ASSERT_DEATH(arrow.target.get(), ""); 586 ASSERT_DEATH(arrow.target.get(), "");
591 } 587 }
592 588
593 #endif 589 #endif
594 590
595 } // namespace base 591 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698