|
@@ -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 @@ out_of_range:
|
|
|
goto undo;
|
|
|
|
|
|
would_block:
|
|
|
+ q->blocking = sop;
|
|
|
+
|
|
|
if (sop->sem_flg & IPC_NOWAIT)
|
|
|
result = -EAGAIN;
|
|
|
else
|