void free_buf(union SIGNAL **sig);
Возвращает сигнальный буфер, который больше не нужен, пулу вызывающего блока. NULL помещается по указателю сигнала для предотвращения случайного повторного использования буфера.
sig указатель на указатель_на_сигнальный_буфер
Нет
Освобождать буфер, принадлежащий другому процессу - ошибка. Такие буферы должны освобождаться владельцем, или владелец должен быть изменён вызовом restore до вызова free_buf. Этот вызов может разрешить прерывания, если они были запрещены при вызове.
(пропущено про старые реализации)
Отметим, что многие вызовы OSE возвращают буферы, выделенные ядром. Эти буферы имюет типы, используемые разными функциями, и должны быть приведены к типу (union SIGNAL **) при освобождении.
static const SIGSELECT any_sig[]= {0}; union SIGNAL { SIGSELECT sig_no; } OS_PROCESS(my_process) { union SIGNAL * sig; for(;;) { sig = receive((SIGSELECT *) any_sig); free_buf( &sig ); } }