ham_condition_handle(), ham_condition_handle_node()

Получить дескриптор условия объекта

Прототип:

#include <ha/ham.h>
ham_condition_t * ham_condition_handle( int nd,
const char *ename,
const char *cname,
unsigned flags );
ham_condition_t * ham_condition_handle_node( const char *nodename,
const char *ename,
const char *cname,
unsigned flags );

Аргументы:

nd
Идентификатор узла.
nodename
Удалённый HAM.
ename
Имя объекта, содержащего условие cname.
cname
Имя условия.
flags
Флаги в настоящий момент не поддерживаются.

Библиотека:

libham

Описание:

Функция ham_condition_handle() возвращает дескриптор условия cname объекта ename.

Дескриптор, полученный от этой функции, может быть передан другим функциям, таким как ham_action_restart() или ham_condition_handle_free().


Note: Чтобы получить дескриптор глобального объекта, следует передать NULL вместо .

Возвращаемый дескриптор непрозрачен — его содержимое доступно только для внутренних нужд библиотеки.

Если указан узел (nd), дескриптор будет относиться к комбинации объект/условие/действие, которая относится к процессу на данном удаленном узле. Функция ham_condition_handle_node() используется, когда nodename используется для указания удалённого HAM вместо идентификатора узла (nd).

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

Адрес
Корректный дескриптор ham_condition_t.
NULL
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EINVAL
Имя cname или ename некорректно (например, содержит символ /) или имеет значение NULL.
ENAMETOOLONG
Указанное имя (в ename) слишком длинное, т.е. оно превышает _POSIX_PATH_MAX (определено в <limits.h>). Обратите внимание, что общая длина имени объекта/условия/действия также ограничена _POSIX_PATH_MAX.
ENOENT
Отсутствует заданное условие в объекте ename в текущем контексте HAM.
ENOMEM
Недостаточно памяти для создания нового дескриптора.

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

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

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


Warning: Вызов ham_condition_handle() и последующее использование дескриптора, возвращенного в таком вызове, как ham_action_restart(), полностью асинхронны. Следовательно, действие/условие/объект может более не существовать к тому моменту, когда дескриптор будет использоваться для присоединения действий.

В таком случае функции ham_action*() вернут ошибку (ENOENT), сообщающую, что условие не существует в данном объекте.

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

ham_action_execute(), ham_action_handle(), ham_action_handle_free(), ham_action_notify_pulse(), ham_action_notify_signal(), ham_action_remove(), ham_action_restart(), ham_action_waitfor(), ham_condition_handle_free(), ham_entity_handle(), ham_entity_handle_free()




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