GET_ROBUST_LIST(2)

ИМЯ
get_robust_list, set_robust_list - возвращает/назначает список надёжных фьютексов (futexes)

ОБЗОР
#include <linux/futex.h>
#include <sys/types.h>
#include <syscall.h>

long get_robust_list(int pid, struct robust_list_head **head_ptr,
                     size_t *len_ptr);
long set_robust_list(struct robust_list_head *head, size_t len);
Замечание: В glibc нет обёрточных функций для этих системных вызовов; смотрите ЗАМЕЧАНИЯ.

ОПИСАНИЕ
Реализация надёжных фьютексов требует ведения понетевых списков надёжных фьютексов, которые будут разблокированы при завершении нити. Данные списки сопровождаются из пользовательского пространства; ядро уведомляется только о расположении начала списка. Системный вызов get_robust_list() возвращает начало списка надёжных фьютексов нити, идентификатор которой указан в pid. Если значение pid равно 0, то возвращается начало списка вызывающей нити. Начало списка сохраняется в расположение, указанное head_ptr. Размер объекта, указываемый **head_ptr, сохраняется в len_ptr. Право вызывать get_robust_list() определяется проверкой режима доступа ptrace PTRACE_MODE_READ_REALCREDS; смотрите ptrace(2). Системный вызов set_robust_list() запрашивает ядро записать начало списка надёжных фьютексов, принадлежащего вызывающей нити. Аргумент head содержит начало списка для записи. Аргумент len должен быть равен sizeof(*head).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Системные вызовы set_robust_list() и get_robust_list() возвращают ноль при успешном выполнении и код ошибки в противном случае.

ОШИБКИ
Системный вызов pthread_setcancelstate() может завершиться со следующей ошибкой:

EINVAL
    Значение len не равно sizeof(struct robust_list_head).

Системный вызов get_robust_list() может завершиться со следующими ошибками:

EPERM
    Вызывающий процесс не имеет прав на просмотр списка надёжных фьютексов нити с идентификатором pid и не имеет мандата CAP_SYS_PTRACE.

ESRCH
    Нить с идентификатором pid не найдена.

EFAULT
    Начало списка надёжных фьютексов невозможно сохранить в расположение head.

ВЕРСИИ
Данные системные вызовы были добавлены в Linux 2.6.17.

ЗАМЕЧАНИЯ
Эти системные вызовы не нужны обычным приложениям. Поддержка в glibc отсутствует. В маловероятном случае, когда вы хотите вызвать их напрямую, используйте syscall(2). В нити может быть только один список надёжных фьютексов; поэтому приложения, которым требуется данное свойство, должны использовать мьютексы, предоставляемые glibc.

СМОТРИТЕ ТАКЖЕ
futex(2) Файлы Documentation/robust-futexes.txt и Documentation/robust-futex-ABI.txt в дереве исходного кода ядра Linux