コード例 #1
0
ファイル: Workers.c プロジェクト: Youx/craftd
void
CD_KillWorkersAvoid (CDWorkers* self, size_t number, CDWorker* worker)
{
    assert(self);
    assert(worker);

    if (number >= self->length) {
        number = self->length - 1;
    }

    for (size_t i = self->length - 1; (self->length - i) < self->length; i--) {
        if (self->item[i] == worker) {
            worker = self->item[0];
            self->item[0] = self->item[i];
            self->item[i] = worker;
        }

        CD_StopWorker(self->item[i]);
    }

    pthread_mutex_lock(&self->lock.mutex);
    pthread_cond_broadcast(&self->lock.condition);
    pthread_mutex_unlock(&self->lock.mutex);

    for (size_t i = self->length - 1; (self->length - i) < self->length; i--) {
        CD_DestroyWorker(self->item[i]);
    }

    self->length -= number;
    self->item    = CD_realloc(self->item, self->length * sizeof(CDWorker*));
}
コード例 #2
0
ファイル: Workers.c プロジェクト: Youx/craftd
CDWorkers*
CD_AppendWorker (CDWorkers* self, CDWorker* worker)
{
    self->item = CD_realloc(self->item, sizeof(CDWorker*) * ++self->length);

    self->item[self->length - 1] = worker;

    return self;
}
コード例 #3
0
ファイル: minecraft.c プロジェクト: gmoonen/craftd
MCMetadata*
MC_AppendData (MCMetadata* metadata, MCData* data)
{
    metadata->item = CD_realloc(metadata->item, sizeof(MCData*) * ++metadata->length);

    metadata->item[metadata->length - 1] = data;

    return metadata;
}
コード例 #4
0
ファイル: minecraft.c プロジェクト: espes/craftd
SVMetadata*
SV_AppendData (SVMetadata* metadata, SVData* data)
{
	metadata->item = CD_realloc(metadata->item, sizeof(SVData*) * ++metadata->length);

	metadata->item[metadata->length - 1] = data;

	return metadata;
}