ham_condition()

Настроить условие, которое будет срабатывать при наступлении определенного события

Прототип:

#include <ha/ham.h>
ham_condition_t * ham_condition( ham_entity_t *ehdl,
int type,
const char *cname,
unsigned flags );

Аргументы:

ehdl
Дескриптор объекта HAM. Аргумент ehdl представляет собой дескриптор объекта, полученный либо:
type
Тип:
CONDDEATH
Объект "умер". Смерть объекта обнаруживается для всех процессов в сеансе 1, для процессов, которые аварийно завершаются (обычно из-за доставки сигнала), и для процессов, которые присоединяются как самостоятельно присоединяемые объекты.
CONDDETACH
Объект отсоединился от HAM.
CONDHBEATMISSEDLOW
Объект пропустил контрольный сигнал "низкого" уровня важности.
CONDHBEATMISSEDHIGH
Объект пропустил контрольный сигнал "высокого" уровня важности.
CONDRESTART
Объект был перезапущен.
cname
Имя условия.
flags
Флаги:
HCONDINDEPENDENT
Указывает, что действия, связанные с данным условием, должны выполняться в отдельном потоке. Когда условие срабатывает, действия внутри него выполняются в порядке FIFO. Для нескольких условий, которые запускаются одновременно, условия обслуживаются в произвольном порядке. При установке данного флага, условие помечается как независимое, т.е. все действия, связанные с ним, выполняются в отдельном потоке, независимо от действий в других условиях.
HCONDNOWAIT
Указывает, что условие не может содержать никаких задержек действий (waitfor). Задержки действия обычно выполняются медленно и могут иметь значительные издержки. Это задержит выполнение последующих действий в списке. Указание HCONDNOWAIT гарантирует отсутствие задержек после срабатывания условия.
HREARMAFTERRESTART
Указывает, что условие должно быть автоматически повторно установлено после перезапуска объекта, которому оно принадлежит. По умолчанию этот флаг отключен — условия автоматически удаляются при перезапуске объекта. Следует обратить внимание, что если объект, которому принадлежит условие, удаляется, данное условие также будет удалено, независимо от состояния данного флага.

Библиотека:

libham

Описание:

Данная функция вызывается, чтобы настроить условие, которое будет срабатывать при возникновении значимого события.

Каждый объект может быть связан с несколькими различными условиями, и с каждым из этих условий связан набор действий, которые будут выполняться в последовательности FIFO, когда условие истинно. Если объект имеет несколько условий, которые выполняются одновременно, с разными наборами действий, связанных с каждым условием, то все действия, связанные с каждым условием, выполняются последовательно.

Данный механизм позволяет объединять действия в наборы и удалять/управлять ими как единой «группой», а не как отдельными элементами.

Поскольку условия связаны с объектами, дескриптор объекта (ehdl) должен быть доступен прежде чем будут добавлены условия.

Аргумент cname — это имя условия. Оно должен быть уникальным для всех условий в данном объекте.

Когда условие срабатывает, выполняются все действия, определенные во всех условиях данного type. Когда объект "умирает", срабатывает условие типа HCONDDEATH, и выполняются все действия во всех условиях, соответствующих этому типу.


Note: Необходимо вызвать функцию ham_connect() перед первым вызовом ham_condition() в процессе. Если процесс вызывает ham_connect(), а затем вызывает fork(), дочерний процесс должен снова вызвать ham_connect(), прежде чем он сможет успешно вызвать ham_condition() для добавления условий.

Возвращаемое значение:

Адрес
Дескриптор условия данного объекта.
NULL
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EBADF
Не удалось подключиться к HAM.
EEXIST
Переданное имя для действия уже существует.
EINVAL
Дескриптор, type или cnam некорректны (например, содержат символ /) или имеют значение NULL. Не удалось подключиться к HAM. Это происходит, когда процесс, открывший соединение (используя ham_connect()), и процесс, вызывающий ham_condition(), не совпадают.
ENAMETOOLONG
Указанное имя (в cname) слишком длинное, т.е. оно превышает _POSIX_PATH_MAX (определено в <limits.h>). Обратите внимание, что общая длина имени объекта/условия/действия также ограничена _POSIX_PATH_MAX.
ENOMEM
Недостаточно памяти для создания нового дескриптора.

В дополнение к вышеуказанным ошибкам HAM возвращает любую ошибку, с которой он сталкивается при обслуживании данного запроса.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

ham_attach(), ham_attach_self(), ham_condition_remove(), ham_connect(), ham_entity_handle()




Предыдущий раздел: Менеджер высокой готовности (HAM)