[ostree] sysroot: Add an unload() API



commit 5c20ea920e0986686b3bd680a43a1ab1cdde37ea
Author: Colin Walters <walters verbum org>
Date:   Thu Aug 13 12:43:14 2015 -0400

    sysroot: Add an unload() API
    
    This will be used by gnome-continuous at least to drop the reference
    to the fd so that unmounting can proceed.  See
    https://git.gnome.org/browse/gnome-continuous/commit/?id=95e9910ea288d302509ca667e0d190dd89377dd5

 src/libostree/ostree-sysroot.c |   21 +++++++++++++++++++--
 src/libostree/ostree-sysroot.h |    2 ++
 2 files changed, 21 insertions(+), 2 deletions(-)
---
diff --git a/src/libostree/ostree-sysroot.c b/src/libostree/ostree-sysroot.c
index c7b3e47..7a4686d 100644
--- a/src/libostree/ostree-sysroot.c
+++ b/src/libostree/ostree-sysroot.c
@@ -72,8 +72,7 @@ ostree_sysroot_finalize (GObject *object)
 
   glnx_release_lock_file (&self->lock);
 
-  if (self->sysroot_fd != -1)
-    (void) close (self->sysroot_fd);
+  (void) ostree_sysroot_unload (self);
 
   G_OBJECT_CLASS (ostree_sysroot_parent_class)->finalize (object);
 }
@@ -224,6 +223,24 @@ ostree_sysroot_get_fd (OstreeSysroot *self)
 }
 
 /**
+ * ostree_sysroot_unload:
+ * @self: Sysroot
+ *
+ * Release any resources such as file descriptors referring to the
+ * root directory of this sysroot.  Normally, those resources are
+ * cleared by finalization, but in garbage collected languages that
+ * may not be predictable.
+ *
+ * This undoes the effect of `ostree_sysroot_load()`.
+ */
+void
+ostree_sysroot_unload (OstreeSysroot  *self)
+{
+  if (self->sysroot_fd != -1)
+    (void) close (self->sysroot_fd);
+}
+
+/**
  * ostree_sysroot_ensure_initialized:
  * @self: Sysroot
  * @cancellable: Cancellable
diff --git a/src/libostree/ostree-sysroot.h b/src/libostree/ostree-sysroot.h
index ce128bb..2fbc23b 100644
--- a/src/libostree/ostree-sysroot.h
+++ b/src/libostree/ostree-sysroot.h
@@ -45,6 +45,8 @@ gboolean ostree_sysroot_load (OstreeSysroot  *self,
                               GCancellable   *cancellable,
                               GError        **error);
 
+void ostree_sysroot_unload (OstreeSysroot  *self);
+
 gboolean ostree_sysroot_ensure_initialized (OstreeSysroot  *self,
                                             GCancellable   *cancellable,
                                             GError        **error);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]