Beispiel #1
0
sem_undo_t *
semu_create(semaphore_t *sem, int value) {
    sem_undo_t *semu;
    if ((semu = kmalloc(sizeof(sem_undo_t))) != NULL) {
        if (sem == NULL && (sem = kmalloc(sizeof(semaphore_t))) != NULL) {
            sem_init(sem, value);
        }
        if (sem != NULL) {
            sem_count_inc(sem);
            semu->sem = sem;
            return semu;
        }
        kfree(semu);
    }
    return NULL;
}
Beispiel #2
0
sem_undo_t*
semu_create_with_address(semaphore_t *sem, uintptr_t addr, int value) {
	sem_undo_t *semu;
	if((semu = kmalloc(sizeof(sem_undo_t))) != NULL) {
		if(sem == NULL && (sem = kmalloc(sizeof(semaphore_t))) != NULL) {
			sem_init_with_address(sem, addr, value);
		}
		if(sem != NULL) {
			sem_count_inc(sem);
			semu->sem = sem;
			return semu;
		}
		kfree(semu);
	}
	return NULL;
}