Vincent Povirk : ole32: Rewrite transacted storage to be more lazy.

Alexandre Julliard julliard at winehq.org
Thu May 6 11:13:24 CDT 2010


Module: wine
Branch: master
Commit: d07a4868a11a282acafa4cefcf3cac53da82277d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d07a4868a11a282acafa4cefcf3cac53da82277d

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Wed May  5 14:23:12 2010 -0500

ole32: Rewrite transacted storage to be more lazy.

When creating a new transacted storage object (or reverting an
existing one), rather than copy the original storage, we simply create
a "stub directory entry" for the root. As stub entries are accessed,
we fill in their data from the parent and create new stubs for any
linked entries. The streams have copy on write semantics - reads are
from the original entry until a change is made, then we make a copy in
the scratch file.

When committing transacted storages, we have to create a new tree with
the new data so that the storage entry can be modified in one step,
but unmodified sections of the tree can now be shared between the new
tree and the old. An entry can be shared if it and all entries
reachable from it are unmodified. In the trivial case where nothing
has been modified, we don't have to make a new tree at all.

---

 dlls/ole32/storage32.c |  792 +++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 646 insertions(+), 146 deletions(-)

Diff:   http://source.winehq.org/git/wine.git/?a=commitdiff;h=d07a4868a11a282acafa4cefcf3cac53da82277d



More information about the wine-cvs mailing list