summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarthurhsu@google.com <arthurhsu@google.com@672e30a5-4c29-85ac-ac6d-611c735e0a51>2011-09-20 20:03:14 +0000
committerarthurhsu@google.com <arthurhsu@google.com@672e30a5-4c29-85ac-ac6d-611c735e0a51>2011-09-20 20:03:14 +0000
commit09f3dda615ba59d0b686e8c36f1e8426b9235746 (patch)
tree8a3ee3e670da14794849e45f269b24b21e29fdc5
parent15c65e73fa282ac33c3d4e464ceed659672d4c7e (diff)
downloadsrc-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.cc4
-rw-r--r--sfntly/data/readable_font_data.h5
-rw-r--r--sfntly/table/bitmap/bitmap_size_table.cc1
-rw-r--r--sfntly/table/bitmap/bitmap_size_table.h2
-rw-r--r--sfntly/table/bitmap/eblc_table.cc2
-rw-r--r--sfntly/table/bitmap/eblc_table.h3
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;