| Index: chrome/browser/sync/syncable/syncable.h
|
| diff --git a/chrome/browser/sync/syncable/syncable.h b/chrome/browser/sync/syncable/syncable.h
|
| index 3793a2cbde592cc08d68715cadf17f0fd9ea603d..291e7983e8c3db1faef70068230c40b3d9b69bf7 100644
|
| --- a/chrome/browser/sync/syncable/syncable.h
|
| +++ b/chrome/browser/sync/syncable/syncable.h
|
| @@ -586,6 +586,10 @@ struct DirectoryChangeEvent {
|
| // callbacks or attempt to lock anything because a
|
| // WriteTransaction is being held until the listener returns.
|
| CALCULATE_CHANGES,
|
| + // Means the WriteTransaction is ending, and this is the absolute
|
| + // last chance to perform any read operations in the current transaction.
|
| + // It is not recommended that the listener perform any writes.
|
| + TRANSACTION_ENDING,
|
| // Means the WriteTransaction has been released and the listener
|
| // can now take action on the changes it calculated.
|
| TRANSACTION_COMPLETE,
|
| @@ -594,7 +598,7 @@ struct DirectoryChangeEvent {
|
| } todo;
|
| // These members are only valid for CALCULATE_CHANGES.
|
| const OriginalEntries* originals;
|
| - BaseTransaction* trans;
|
| + BaseTransaction* trans; // This is valid also for TRANSACTION_ENDING
|
| WriterTag writer;
|
| typedef DirectoryChangeEvent EventType;
|
| static inline bool IsChannelShutdownEvent(const EventType& e) {
|
| @@ -1044,6 +1048,8 @@ class BaseTransaction {
|
| inline Directory* directory() const { return directory_; }
|
| inline Id root_id() const { return Id(); }
|
|
|
| + virtual ~BaseTransaction();
|
| +
|
| protected:
|
| BaseTransaction(Directory* directory, const char* name,
|
| const char* source_file, int line, WriterTag writer);
|
| @@ -1072,7 +1078,7 @@ class ReadTransaction : public BaseTransaction {
|
| ReadTransaction(const ScopedDirLookup& scoped_dir,
|
| const char* source_file, int line);
|
|
|
| - ~ReadTransaction();
|
| + virtual ~ReadTransaction();
|
|
|
| protected: // Don't allow creation on heap, except by sync API wrapper.
|
| friend class sync_api::ReadTransaction;
|
|
|