После того, как структура удалена, она может быть удалена ``окончательно'' (это осуществляется во всех случаях, когда имеются очереди сообщений и наборы семафоров). Поскольку структура удаляется окончательно, referee информируется об этом, а также referee окончательно удаляет данную машину из своих таблиц - как ``держателя'' данной структуры. Ниже показано, что происходит в этом случае:
Сеть
(Запрашивающий компьютер) | (Арбитрирующий компьютер)
|
|-1->back_end~>-2-+ |
| | |
ядро | employer--3------|-> referee
|
Когда на компьютере окончательно удаляется структура IPC, об этом сообщается back_end (1). Он раздваивает employer (2) и ``приносит'' эти новости referee (3), который окончательно удаляет свои соответствующие элементы, проверяет наличие такой структуры в разделяемой памяти и является ли действующий компьютер единственным, содержащим эту структуру. Он должен быть владельцем. В этом случае referee действует как показано на схеме:
Сеть
(Арбитрирующий компьютер) | (Владелец разделяемой памяти)
|
referee --4------|-> front_end --5-->shm_man
В итоге referee сообщает shm_man об отсоединении (4 и 5). Все похоже на случай с простым удалением из разделяемой памяти структуры IPC.
Далее следует все остальное:
Сеть
(Компьютер-владелец) | (Арбитрирующий~компьютер)
|
| |
ядро |<----8--employer | referee
| | | |
| +-7-< front_end <-|------6-+
Здесь referee информирует employer о том, что все действия сделаны (6 и 7); employer информирует ядро о том, что исходный пользовательский процесс, который вызвал окончательное удаление, может продолжаться.
Никаких специальных действий не предпринимается, когда
referee
не может быть информирован об окончательном удалении: referee
будет считать, что компьютер по-прежнему имеет структуру и давать ошибочные ответы
о данной структуре другим машинам (См. программы в каталоге tools,
позволяющие частично решить такую задачу).