G_EVENT(9) | FreeBSD Kernel Developer's Manual | G_EVENT(9) |
名称
g_post_event, g_waitfor_event, g_cancel_event — GEOM イベント管理書式
#include < geom/geom.h> int
g_post_event( g_event_t *func, void *arg, int flag, ...);
int
g_waitfor_event( g_event_t *func, void *arg, int flag, ...);
void
g_cancel_event( void *ref);
解説
GEOM フレームワークは、重要なイベントに関してクラスに知らせるためのそれ自体のイベントキューがあります。また、イベントキューは、例えば I/O パスでのいくつかの制限を対処するために、 GEOM のクラス自体によって使用することができます。そこでは、スリープ、ヘビーウェイトタスクなどが許されません。g_post_event() 関数は、イベントキューから引数 arg で関数 func を呼び出すために GEOM フレームワークに伝えます。 flag 引数は、 g_post_event() のメモリ割り付け内部で malloc(9) に渡されます。唯一の許されたフラグは、 M_WAITOK と M_NOWAIT です。引数の残りは、イベントを識別するための参照として使用されます。 1 つのイベントは、 g_cancel_event() への引数として与えられた参照のいずれかを使用することによって、キャンセルすることができます。参考のリストは、 NULL 値で終わらなければなりません。
g_waitfor_event() 関数は、 g_post_event() 関数のブロックバージョンです。それは、イベントが終了するか、またはキャンセルされるまでウェート (待つ) して、そして、返ります。
g_cancel_event() 関数は、 ref によって識別されたすべてのイベントをキャンセルします。キャンセルは、要求された引数で要求された関数を呼び出すことと同等です、そして、引数 flag は、 EV_CANCEL に設定します。
制限/条件
g_post_event():- 引数 flag は、 M_WAITOK または M_NOWAIT でなければなりません。
- 参考のリストは、 NULL 値で終わらなければなりません。
g_waitfor_event():
- 引数 flag は、 M_WAITOK または M_NOWAIT でなければなりません。
- 参考のリストは、 NULL 値で終わらなければなりません。
- g_waitfor_event() 関数は、デッドロックの結果をもたらすので、イベントから呼び出されることはできません。
戻り値
成功すれば g_post_event() と g_waitfor_event() 関数は、0 を返し、そうでなければ、エラーコードが返されます。使用例
関数の例は、イベントキューから呼び出します。
void example_event(void *arg, int flag) { if (flag == EV_CANCEL) { printf("Event with argument %p canceled.\n", arg); return; } printf("Event with argument %p called.\n", arg); }
エラー
g_post_event() 関数のあり得るエラーは、次の通りです:- [ ENOMEM]
- flag 引数は、 M_NOWAIT に設定され、メモリが不足しています。
g_waitfor_event() 関数のあり得るエラーは、次の通りです:
- [ EAGAIN]
- イベントは、キャンセルされました。
- [ ENOMEM]
- flag 引数は、 M_NOWAIT に設定され、メモリが不足しています。
関連項目
geom(4), DECLARE_GEOM_CLASS(9), g_access(9), g_attach(9), g_bio(9), g_consumer(9), g_data(9), g_geom(9), g_provider(9), g_provider_by_name(9), g_wither_geom(9)作者
このマニュアルページは、 <pjd@FreeBSD.org>によって書かれました。January 16, 2004 | FreeBSD |