diff --git a/ipc/sem.c b/ipc/sem.c index b93b561842cdf86a1ed52ba575151980b9d13d5f..d61362b31f1ebf996492d5bdf6644aef25b0310c 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -109,6 +109,7 @@ struct sem_queue { int pid; /* process id of requesting process */ int status; /* completion status of operation */ struct sembuf *sops; /* array of pending operations */ + struct sembuf *blocking; /* the operation that blocked */ int nsops; /* number of operations */ int alter; /* does *sops alter the array? */ }; @@ -642,6 +643,8 @@ static int perform_atomic_semop(struct sem_array *sma, struct sem_queue *q) goto undo; would_block: + q->blocking = sop; + if (sop->sem_flg & IPC_NOWAIT) result = -EAGAIN; else