diff --git a/ipc/sem.c b/ipc/sem.c index 5711616..1dfc3c1 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -1243,10 +1243,11 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum, err = -EIDRM; goto out_free; } - sem_unlock(sma, -1); } - sem_lock(sma, NULL, -1); + /* has the ipc lock already been taken? */ + if(nsems <= SEMMSL_FAST) + sem_lock(sma, NULL, -1); for (i = 0; i < sma->sem_nsems; i++) sem_io[i] = sma->sem_base[i].semval; sem_unlock(sma, -1);