| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 758 // | 758 // |
| 759 // If the trait allows it, invoke the trace callback right here on the | 759 // If the trait allows it, invoke the trace callback right here on the |
| 760 // not-yet-marked object. | 760 // not-yet-marked object. |
| 761 if (TraceEagerlyTrait<T>::value) { | 761 if (TraceEagerlyTrait<T>::value) { |
| 762 // Protect against too deep trace call chains, and the | 762 // Protect against too deep trace call chains, and the |
| 763 // unbounded system stack usage they can bring about. | 763 // unbounded system stack usage they can bring about. |
| 764 // | 764 // |
| 765 // Assert against deep stacks so as to flush them out, | 765 // Assert against deep stacks so as to flush them out, |
| 766 // but test and appropriately handle them should they occur | 766 // but test and appropriately handle them should they occur |
| 767 // in release builds. | 767 // in release builds. |
| 768 // |
| 769 // ASan adds extra stack usage, so disable the assert when it is |
| 770 // enabled so as to avoid testing against a much lower & too low, |
| 771 // stack depth threshold. |
| 772 // |
| 768 // FIXME: visitor->isMarked(t) exception is to allow empty trace() | 773 // FIXME: visitor->isMarked(t) exception is to allow empty trace() |
| 769 // calls from HashTable weak processing. Remove the condition once | 774 // calls from HashTable weak processing. Remove the condition once |
| 770 // it is refactored. | 775 // it is refactored. |
| 776 #if !defined(ADDRESS_SANITIZER) |
| 771 ASSERT(visitor->canTraceEagerly() || visitor->isMarked(t)); | 777 ASSERT(visitor->canTraceEagerly() || visitor->isMarked(t)); |
| 778 #endif |
| 772 if (LIKELY(visitor->canTraceEagerly())) { | 779 if (LIKELY(visitor->canTraceEagerly())) { |
| 773 if (visitor->ensureMarked(t)) { | 780 if (visitor->ensureMarked(t)) { |
| 774 TraceTrait<T>::trace(visitor, const_cast<T*>(t)); | 781 TraceTrait<T>::trace(visitor, const_cast<T*>(t)); |
| 775 } | 782 } |
| 776 return; | 783 return; |
| 777 } | 784 } |
| 778 } | 785 } |
| 779 visitor->mark(const_cast<T*>(t), &TraceTrait<T>::trace); | 786 visitor->mark(const_cast<T*>(t), &TraceTrait<T>::trace); |
| 780 } | 787 } |
| 781 | 788 |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 984 struct GCInfoTrait { | 991 struct GCInfoTrait { |
| 985 static size_t index() | 992 static size_t index() |
| 986 { | 993 { |
| 987 return GCInfoAtBase<typename GetGarbageCollectedBase<T>::type>::index(); | 994 return GCInfoAtBase<typename GetGarbageCollectedBase<T>::type>::index(); |
| 988 } | 995 } |
| 989 }; | 996 }; |
| 990 | 997 |
| 991 } | 998 } |
| 992 | 999 |
| 993 #endif | 1000 #endif |
| OLD | NEW |