diff options
author | Colin Walters <walters@verbum.org> | 2015-05-04 18:35:52 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2015-05-05 08:52:44 -0400 |
commit | 9ef98fd05a335834b3ecb005d820be19784764d8 (patch) | |
tree | 2ea2810444e05a64d29dd8b919d50a93a63c3334 /src/ostree/ot-admin-builtin-deploy.c | |
parent | 33b06675976e5a353cff29bbf5622f7fd7565c27 (diff) | |
download | ostree-9ef98fd05a335834b3ecb005d820be19784764d8.tar.gz |
sysroot: Add an API to lock
If a system administrator happens to type `ostree admin upgrade`
multiple times, currently that will lead to a potentially corrupted
system.
I originally attempted to do locking *internally* in `libostree`, but
that didn't work out because currently a number of the commands
perform multi-step operations that all need to be serialized. All of
the current code in `ostree admin deploy` is an example.
Therefore, allow callers to perform locking, as most of the higher
level logic is presently implemented there.
At some point, we can revisit having internal locking, but it will be
difficult. A more likely approach would be similar to Java's approach
with concurrency on iterators - a "fail fast" method.
Diffstat (limited to 'src/ostree/ot-admin-builtin-deploy.c')
-rw-r--r-- | src/ostree/ot-admin-builtin-deploy.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/ostree/ot-admin-builtin-deploy.c b/src/ostree/ot-admin-builtin-deploy.c index 091a7eac..1872894b 100644 --- a/src/ostree/ot-admin-builtin-deploy.c +++ b/src/ostree/ot-admin-builtin-deploy.c @@ -79,6 +79,9 @@ ot_admin_builtin_deploy (int argc, char **argv, GCancellable *cancellable, GErro refspec = argv[1]; + if (!ostree_sysroot_lock (sysroot, error)) + goto out; + if (!ostree_sysroot_load (sysroot, cancellable, error)) goto out; @@ -172,6 +175,8 @@ ot_admin_builtin_deploy (int argc, char **argv, GCancellable *cancellable, GErro ret = TRUE; out: + if (sysroot) + ostree_sysroot_unlock (sysroot); if (origin) g_key_file_unref (origin); if (context) |