Последней примитивной операцией над очередями struct sem_queue является именно эта, в которой выполняется удаление узла из очереди.
Частично удаляет q из очереди путем изменения указателя next предыдущего узла очереди.
Обновляет также указатель prev следующего узла, если он есть, или sma->sem_pending_last, если это— последний узел в очереди. Обратите внимание, что нет явного кода для удаления единственного узла очереди; вам следует выделить время, чтобы разобраться в том, почему и этот случай работает, если вы еще этого не сделали.
Устанавливает указатель prev удаленного узла в NULL, чтобы код в строках и позволял эффективно обнаружить, находится ли все еще в очереди этот узел.