OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef BASE_REQUIRES_TRACING_H_ | 5 #ifndef CYCLE_SUB_H_ |
6 #define BASE_REQUIRES_TRACING_H_ | 6 #define CYCLE_SUB_H_ |
7 | 7 |
8 #include "heap/stubs.h" | 8 #include "heap/stubs.h" |
9 | 9 |
10 namespace WebCore { | 10 namespace WebCore { |
11 | 11 |
12 class A : public GarbageCollected<A> { | 12 class C; |
| 13 |
| 14 // This contains a leaking cycle: |
| 15 // C -per-> A -sub-> B -ref-> C |
| 16 |
| 17 class A : public GarbageCollectedFinalized<A> { |
13 public: | 18 public: |
14 virtual void trace(Visitor*); | 19 virtual void trace(Visitor*) {} |
15 }; | 20 }; |
16 | 21 |
17 class B : public A { | 22 class B : public A { |
18 // Does not need trace | 23 public: |
| 24 virtual void trace(Visitor*); |
| 25 private: |
| 26 RefPtr<C> m_c; |
19 }; | 27 }; |
20 | 28 |
21 class C : public B { | 29 class C : public RefCounted<C> { |
22 public: | |
23 void trace(Visitor*); | |
24 private: | 30 private: |
25 Member<A> m_a; | 31 Persistent<A> m_a; |
26 }; | |
27 | |
28 class D : public C { | |
29 public: | |
30 void trace(Visitor*); | |
31 private: | |
32 Member<A> m_a; | |
33 }; | 32 }; |
34 | 33 |
35 } | 34 } |
36 | 35 |
37 #endif | 36 #endif |
OLD | NEW |