| Index: src/serialize.h
|
| diff --git a/src/serialize.h b/src/serialize.h
|
| index 1fc125bcd38188e1540dc532a223a2bea6c061d7..93874e6b74daa1ead577bd6190bf7e199856364c 100644
|
| --- a/src/serialize.h
|
| +++ b/src/serialize.h
|
| @@ -456,6 +456,12 @@ class SerializationAddressMapper {
|
|
|
| class CodeAddressMap;
|
|
|
| +enum SerializationState {
|
| + SERIALIZER_STATE_DISABLED = 0,
|
| + SERIALIZER_STATE_ENABLED = 1,
|
| + SERIALIZER_STATE_PERMANENTLY_DISABLED = 2
|
| +};
|
| +
|
| // There can be only one serializer per V8 process.
|
| class Serializer : public SerializerDeserializer {
|
| public:
|
| @@ -474,9 +480,26 @@ class Serializer : public SerializerDeserializer {
|
| static void Disable();
|
|
|
| // Call this when you have made use of the fact that there is no serialization
|
| - // going on.
|
| - static void TooLateToEnableNow() { too_late_to_enable_now_ = true; }
|
| - static bool enabled() { return serialization_enabled_; }
|
| + // going on. Returns true if serialization was disabled, and now it's
|
| + // permanetely disabled.
|
| + static bool TrySetPermanentlyDisabled() {
|
| + LockGuard<Mutex> lock_guard(&serialization_mutex_);
|
| + // Changes are only made under the lock.
|
| + if (serialization_state_ == SERIALIZER_STATE_DISABLED) {
|
| + serialization_state_ = SERIALIZER_STATE_PERMANENTLY_DISABLED;
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| + static bool IsPermanentlyDisabled() {
|
| + LockGuard<Mutex> lock_guard(&serialization_mutex_);
|
| + return serialization_state_ ==
|
| + SERIALIZER_STATE_PERMANENTLY_DISABLED;
|
| + }
|
| + static bool enabled() {
|
| + LockGuard<Mutex> lock_guard(&serialization_mutex_);
|
| + return serialization_state_ == SERIALIZER_STATE_ENABLED;
|
| + }
|
| SerializationAddressMapper* address_mapper() { return &address_mapper_; }
|
| void PutRoot(int index,
|
| HeapObject* object,
|
| @@ -574,9 +597,10 @@ class Serializer : public SerializerDeserializer {
|
| int fullness_[LAST_SPACE + 1];
|
| SnapshotByteSink* sink_;
|
| ExternalReferenceEncoder* external_reference_encoder_;
|
| - static bool serialization_enabled_;
|
| - // Did we already make use of the fact that serialization was not enabled?
|
| - static bool too_late_to_enable_now_;
|
| +
|
| + static Mutex serialization_mutex_;
|
| + static SerializationState serialization_state_;
|
| +
|
| SerializationAddressMapper address_mapper_;
|
| intptr_t root_index_wave_front_;
|
| void Pad();
|
|
|