Пример #1
0
chan mill_chmake(size_t sz, size_t bufsz) {
    /* We are allocating 1 additional element after the channel buffer to
       store the done-with value. It can't be stored in the regular buffer
       because that would mean chdone() would block when buffer is full. */
    struct mill_chan *ch = (struct mill_chan*)
        malloc(sizeof(struct mill_chan) + (sz * (bufsz + 1)));
    if(!ch)
        return NULL;
    ch->sz = sz;
    ch->sender.type = MILL_SENDER;
    ch->sender.seqnum = mill_choose_seqnum;
    mill_list_init(&ch->sender.clauses);
    ch->receiver.type = MILL_RECEIVER;
    ch->receiver.seqnum = mill_choose_seqnum;
    mill_list_init(&ch->receiver.clauses);
    ch->refcount = 1;
    ch->done = 0;
    ch->bufsz = bufsz;
    ch->items = 0;
    ch->first = 0;
    return ch;
}
Пример #2
0
void mill_timer_postfork(void) {
    mill_list_init(&mill_timers);
}