chiark / gitweb /
fwd: Improve `source' and `target' lifecycle management.
[fwd] / fwd.h
diff --git a/fwd.h b/fwd.h
index f075c53ef1ff3b9dff1f9fe27013fcf3a1ab8960..e295c8b7b551772b219332de558eb492a0414e1b 100644 (file)
--- a/fwd.h
+++ b/fwd.h
@@ -899,6 +899,7 @@ typedef struct endpt_ops {
 
 typedef struct target {
   struct target_ops *ops;
+  unsigned ref;
   char *desc;
 } target;
 
@@ -973,9 +974,13 @@ typedef struct target_ops {
 typedef struct source {
   struct source *next, *prev;
   struct source_ops *ops;
+  unsigned ref;
+  unsigned f;
+#define SF_ACTIVE 1u
   char *desc;
 } source;
 
+
 /* --- Forwarding source operations --- */
 
 typedef struct source_ops {
@@ -1019,6 +1024,18 @@ typedef struct source_ops {
 
   void (*attach)(source */*s*/, scanner */*sc*/, target */*t*/);
 
+  /* --- @shutdown@ --- *
+   *
+   * Arguments:        @source *s@ = pointer to source
+   *
+   * Returns:  ---
+   *
+   * Use:      Deactivates the source so that it won't produce any more
+   *           endpoints.
+   */
+
+  void (*shutdown)(source */*s*/);
+
   /* --- @destroy@ --- *
    *
    * Arguments:        @source *s@ = pointer to source
@@ -1078,6 +1095,28 @@ extern void endpt_killall(void);
 
 extern void endpt_join(endpt */*a*/, endpt */*b*/, const char */*desc*/);
 
+/* --- @target_inc@ --- *
+ *
+ * Arguments:  @target *t@ = pointer to a source
+ *
+ * Returns:    ---
+ *
+ * Use:                Increments a target's refcount.
+ */
+
+extern void target_inc(target */*t*/);
+
+/* --- @target_dec@ --- *
+ *
+ * Arguments:  @target *t@ = pointer to a target
+ *
+ * Returns:    ---
+ *
+ * Use:                Decrements a target's refcount, destroying it if necessary.
+ */
+
+extern void target_dec(target */*t*/);
+
 /* --- @source_add@ --- *
  *
  * Arguments:  @source *s@ = pointer to a source
@@ -1102,6 +1141,28 @@ extern void source_add(source */*s*/);
 
 extern void source_remove(source */*s*/);
 
+/* --- @source_inc@ --- *
+ *
+ * Arguments:  @source *s@ = pointer to a source
+ *
+ * Returns:    ---
+ *
+ * Use:                Increments a source's refcount.
+ */
+
+extern void source_inc(source */*s*/);
+
+/* --- @source_dec@ --- *
+ *
+ * Arguments:  @source *s@ = pointer to a source
+ *
+ * Returns:    ---
+ *
+ * Use:                Decrements a source's refcount, destroying it if necessary.
+ */
+
+extern void source_dec(source */*s*/);
+
 /* --- @source_killall@ --- *
  *
  * Arguments:  ---