9 make_tube(const char *name
)
13 t
= malloc(sizeof(struct tube
));
18 t
->name
[MAX_TUBE_NAME_LEN
- 1] = '\0';
19 strncpy(t
->name
, name
, MAX_TUBE_NAME_LEN
- 1);
20 if (t
->name
[MAX_TUBE_NAME_LEN
- 1] != '\0') twarnx("truncating tube name");
29 t
->ready
.less
= job_pri_less
;
30 t
->delay
.less
= job_delay_less
;
31 t
->ready
.rec
= job_setheappos
;
32 t
->delay
.rec
= job_setheappos
;
33 t
->buried
= (struct job
) { };
34 t
->buried
.prev
= t
->buried
.next
= &t
->buried
;
35 ms_init(&t
->waiting
, NULL
, NULL
);
37 t
->stat
= (struct stats
) {0, 0, 0, 0, 0};
38 t
->using_ct
= t
->watching_ct
= 0;
39 t
->deadline_at
= t
->pause
= 0;
50 ms_clear(&t
->waiting
);
58 if (t
->refs
< 1) return twarnx("refs is zero for tube: %s", t
->name
);
61 if (t
->refs
< 1) tube_free(t
);
72 make_and_insert_tube(const char *name
)
80 /* We want this global tube list to behave like "weak" refs, so don't
81 * increment the ref count. */
82 r
= ms_append(&tubes
, t
);
83 if (!r
) return tube_dref(t
), (tube
) 0;
89 tube_find(const char *name
)
94 for (i
= 0; i
< tubes
.used
; i
++) {
96 if (strncmp(t
->name
, name
, MAX_TUBE_NAME_LEN
) == 0) return t
;
102 tube_find_or_make(const char *name
)
104 return tube_find(name
) ? : make_and_insert_tube(name
);