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

Side by Side Diff: third_party/WebKit/Source/wtf/HashTable.h

Issue 1378273002: Retire GC lockout on initializing hash buckets. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: reinstate enter/leaveGCForbiddenScope()..needed elsewhere Created 5 years, 2 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
« 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 /* 1 /*
2 * Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All rights reserv ed.
3 * Copyright (C) 2008 David Levin <levin@chromium.org> 3 * Copyright (C) 2008 David Levin <levin@chromium.org>
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 // makes it possible to use this with types that don't support copying. 784 // makes it possible to use this with types that don't support copying.
785 // The memset to 0 looks like a slow operation but is optimized by the 785 // The memset to 0 looks like a slow operation but is optimized by the
786 // compilers. 786 // compilers.
787 memset(&bucket, 0, sizeof(bucket)); 787 memset(&bucket, 0, sizeof(bucket));
788 } 788 }
789 }; 789 };
790 790
791 template <typename Key, typename Value, typename Extractor, typename HashFunctio ns, typename Traits, typename KeyTraits, typename Allocator> 791 template <typename Key, typename Value, typename Extractor, typename HashFunctio ns, typename Traits, typename KeyTraits, typename Allocator>
792 inline void HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, A llocator>::initializeBucket(ValueType& bucket) 792 inline void HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, A llocator>::initializeBucket(ValueType& bucket)
793 { 793 {
794 // The key and value cannot be initialied atomically, and it would be wrong
795 // to have a GC when only one was initialized and the other still contained
796 // garbage (eg. from a previous use of the same slot). Therefore we forbid
797 // a GC while both the key and the value are initialized.
798 Allocator::enterGCForbiddenScope();
799 HashTableBucketInitializer<Traits::emptyValueIsZero>::template initialize<Tr aits>(bucket); 794 HashTableBucketInitializer<Traits::emptyValueIsZero>::template initialize<Tr aits>(bucket);
800 Allocator::leaveGCForbiddenScope();
801 } 795 }
802 796
803 template <typename Key, typename Value, typename Extractor, typename HashFunctio ns, typename Traits, typename KeyTraits, typename Allocator> 797 template <typename Key, typename Value, typename Extractor, typename HashFunctio ns, typename Traits, typename KeyTraits, typename Allocator>
804 template <typename HashTranslator, typename T, typename Extra> 798 template <typename HashTranslator, typename T, typename Extra>
805 typename HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allo cator>::AddResult HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTra its, Allocator>::add(const T& key, const Extra& extra) 799 typename HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits, Allo cator>::AddResult HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTra its, Allocator>::add(const T& key, const Extra& extra)
806 { 800 {
807 ASSERT(Allocator::isAllocationAllowed()); 801 ASSERT(Allocator::isAllocationAllowed());
808 if (!m_table) 802 if (!m_table)
809 expand(); 803 expand();
810 804
(...skipping 652 matching lines...) Expand 10 before | Expand all | Expand 10 after
1463 CollectionIterator end(toBeRemoved.end()); 1457 CollectionIterator end(toBeRemoved.end());
1464 for (CollectionIterator it(toBeRemoved.begin()); it != end; ++it) 1458 for (CollectionIterator it(toBeRemoved.begin()); it != end; ++it)
1465 collection.remove(*it); 1459 collection.remove(*it);
1466 } 1460 }
1467 1461
1468 } // namespace WTF 1462 } // namespace WTF
1469 1463
1470 #include "wtf/HashIterators.h" 1464 #include "wtf/HashIterators.h"
1471 1465
1472 #endif // WTF_HashTable_h 1466 #endif // WTF_HashTable_h
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