9 make_tube(const char *name
)
16 t
->name
[MAX_TUBE_NAME_LEN
- 1] = '\0';
17 strncpy(t
->name
, name
, MAX_TUBE_NAME_LEN
- 1);
18 if (t
->name
[MAX_TUBE_NAME_LEN
- 1] != '\0') twarnx("truncating tube name");
20 t
->ready
.less
= job_pri_less
;
21 t
->delay
.less
= job_delay_less
;
22 t
->ready
.rec
= job_setheappos
;
23 t
->delay
.rec
= job_setheappos
;
24 t
->buried
= (struct job
) { };
25 t
->buried
.prev
= t
->buried
.next
= &t
->buried
;
26 ms_init(&t
->waiting
, NULL
, NULL
);
37 ms_clear(&t
->waiting
);
45 if (t
->refs
< 1) return twarnx("refs is zero for tube: %s", t
->name
);
48 if (t
->refs
< 1) tube_free(t
);
59 make_and_insert_tube(const char *name
)
67 /* We want this global tube list to behave like "weak" refs, so don't
68 * increment the ref count. */
69 r
= ms_append(&tubes
, t
);
70 if (!r
) return tube_dref(t
), (tube
) 0;
76 tube_find(const char *name
)
81 for (i
= 0; i
< tubes
.used
; i
++) {
83 if (strncmp(t
->name
, name
, MAX_TUBE_NAME_LEN
) == 0) return t
;
89 tube_find_or_make(const char *name
)
91 return tube_find(name
) ? : make_and_insert_tube(name
);