+ for (i = 0; i < num_always; i++)
+ if (always[i] == plan)
+ return i;
+ return -1;
+}
+
+static void remove_from_always(const struct io_plan *plan)
+{
+ int pos;
+
+ if (plan->status != IO_ALWAYS)
+ return;
+
+ pos = find_always(plan);
+ assert(pos >= 0);
+
+ /* Move last one down if we made a hole */
+ if (pos != num_always-1)
+ always[pos] = always[num_always-1];
+ num_always--;
+
+ /* Only free if no fds left either. */
+ if (num_always == 0 && max_fds == 0) {
+ always = tal_free(always);
+ max_always = 0;
+ }
+}
+
+bool backend_new_always(struct io_plan *plan)
+{
+ assert(find_always(plan) == -1);
+
+ if (!max_always) {
+ assert(num_always == 0);
+ always = tal_arr(NULL, struct io_plan *, 8);
+ if (!always)
+ return false;
+ max_always = 8;
+ }