diff options
author | arthurhsu@google.com <arthurhsu@google.com@672e30a5-4c29-85ac-ac6d-611c735e0a51> | 2011-09-20 20:03:14 +0000 |
---|---|---|
committer | arthurhsu@google.com <arthurhsu@google.com@672e30a5-4c29-85ac-ac6d-611c735e0a51> | 2011-09-20 20:03:14 +0000 |
commit | 09f3dda615ba59d0b686e8c36f1e8426b9235746 (patch) | |
tree | 8a3ee3e670da14794849e45f269b24b21e29fdc5 | |
parent | 15c65e73fa282ac33c3d4e464ceed659672d4c7e (diff) | |
download | src-09f3dda615ba59d0b686e8c36f1e8426b9235746.tar.gz |
Add atomicity to whereever needed.
git-svn-id: http://sfntly.googlecode.com/svn/trunk/cpp/src@89 672e30a5-4c29-85ac-ac6d-611c735e0a51
-rw-r--r-- | sfntly/data/readable_font_data.cc | 4 | ||||
-rw-r--r-- | sfntly/data/readable_font_data.h | 5 | ||||
-rw-r--r-- | sfntly/table/bitmap/bitmap_size_table.cc | 1 | ||||
-rw-r--r-- | sfntly/table/bitmap/bitmap_size_table.h | 2 | ||||
-rw-r--r-- | sfntly/table/bitmap/eblc_table.cc | 2 | ||||
-rw-r--r-- | sfntly/table/bitmap/eblc_table.h | 3 |
6 files changed, 11 insertions, 6 deletions
diff --git a/sfntly/data/readable_font_data.cc b/sfntly/data/readable_font_data.cc index ec67757..fb083cb 100644 --- a/sfntly/data/readable_font_data.cc +++ b/sfntly/data/readable_font_data.cc @@ -14,11 +14,11 @@ * limitations under the License. */ -#include "sfntly/data/memory_byte_array.h" #include "sfntly/data/readable_font_data.h" #include <stdio.h> +#include "sfntly/data/memory_byte_array.h" #include "sfntly/data/writable_font_data.h" #include "sfntly/port/exception_type.h" @@ -45,7 +45,7 @@ ReadableFontData* ReadableFontData::CreateReadableFontData(ByteVector* b) { } int64_t ReadableFontData::Checksum() { - // TODO(arthurhsu): IMPLEMENT: atomicity + AutoLock lock(checksum_lock_); if (!checksum_set_) { ComputeChecksum(); } diff --git a/sfntly/data/readable_font_data.h b/sfntly/data/readable_font_data.h index a0d341f..c5833e8 100644 --- a/sfntly/data/readable_font_data.h +++ b/sfntly/data/readable_font_data.h @@ -17,8 +17,8 @@ #ifndef SFNTLY_CPP_SRC_SFNTLY_DATA_READABLE_FONT_DATA_H_ #define SFNTLY_CPP_SRC_SFNTLY_DATA_READABLE_FONT_DATA_H_ -#include "sfntly/port/refcount.h" #include "sfntly/data/font_data.h" +#include "sfntly/port/lock.h" namespace sfntly { @@ -290,7 +290,8 @@ class ReadableFontData : public FontData, // @return the checksum for the total range int64_t ComputeCheckSum(int32_t low_bound, int32_t high_bound); - bool checksum_set_; // TODO(arthurhsu): IMPLEMENT: must be set atomically. + Lock checksum_lock_; + bool checksum_set_; int64_t checksum_; IntegerList checksum_range_; }; diff --git a/sfntly/table/bitmap/bitmap_size_table.cc b/sfntly/table/bitmap/bitmap_size_table.cc index 2b5b9bb..00488ea 100644 --- a/sfntly/table/bitmap/bitmap_size_table.cc +++ b/sfntly/table/bitmap/bitmap_size_table.cc @@ -134,6 +134,7 @@ IndexSubTable* BitmapSizeTable::CreateIndexSubTable(int32_t index) { } IndexSubTableList* BitmapSizeTable::GetIndexSubTableList() { + AutoLock lock(atomic_subtables_lock_); if (atomic_subtables.empty()) { for (int32_t i = 0; i < NumberOfIndexSubTables(); ++i) { IndexSubTablePtr table; diff --git a/sfntly/table/bitmap/bitmap_size_table.h b/sfntly/table/bitmap/bitmap_size_table.h index 3b8e30c..ee58bca 100644 --- a/sfntly/table/bitmap/bitmap_size_table.h +++ b/sfntly/table/bitmap/bitmap_size_table.h @@ -19,6 +19,7 @@ #include <vector> +#include "sfntly/port/lock.h" #include "sfntly/table/bitmap/index_sub_table.h" namespace sfntly { @@ -58,6 +59,7 @@ class BitmapSizeTable : public SubTable, IndexSubTableList* GetIndexSubTableList(); ReadableFontDataPtr master_data_; + Lock atomic_subtables_lock_; IndexSubTableList atomic_subtables; }; typedef Ptr<BitmapSizeTable> BitmapSizeTablePtr; diff --git a/sfntly/table/bitmap/eblc_table.cc b/sfntly/table/bitmap/eblc_table.cc index a198c10..decbadf 100644 --- a/sfntly/table/bitmap/eblc_table.cc +++ b/sfntly/table/bitmap/eblc_table.cc @@ -48,7 +48,7 @@ EblcTable::EblcTable(Header* header, ReadableFontData* data) } BitmapSizeTableList* EblcTable::GetBitmapSizeTableList() { - // TODO(arthurhsu): thread locking. + AutoLock lock(bitmap_size_table_lock_); if (bitmap_size_table_.empty()) { CreateBitmapSizeTable(data_, NumSizes(), &bitmap_size_table_); } diff --git a/sfntly/table/bitmap/eblc_table.h b/sfntly/table/bitmap/eblc_table.h index bf7cb15..84831ef 100644 --- a/sfntly/table/bitmap/eblc_table.h +++ b/sfntly/table/bitmap/eblc_table.h @@ -17,6 +17,7 @@ #ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_ #define SFNTLY_CPP_SRC_SFNTLY_TABLE_BITMAP_EBLC_TABLE_H_ +#include "sfntly/port/lock.h" #include "sfntly/table/bitmap/bitmap_glyph.h" #include "sfntly/table/bitmap/bitmap_size_table.h" #include "sfntly/table/subtable_container_table.h" @@ -145,7 +146,7 @@ class EblcTable : public SubTableContainerTable, int32_t num_sizes, BitmapSizeTableList* output); - // TODO(arthurhsu): this table must be accessed atomically. + Lock bitmap_size_table_lock_; BitmapSizeTableList bitmap_size_table_; }; typedef Ptr<EblcTable> EblcTablePtr; |