このページを編集する際は,編集に関する方針に従ってください.
概要
/** * Initialize manged I/O handling * * This must be called before MIO is used */
実装
void mio_init(void) { pool p; pth_attr_t attr; xmlnode io = NULL; xmlnode karma = NULL; xmlnode tls = NULL; xht namespaces = NULL;
namespaces = xhash_new(3);
- NS_JABBERD_CONFIGFILEはjabberdlib.hで定義されている。内容は"http://jabberd.org/ns/configfile"
xhash_put(namespaces, "", NS_JABBERD_CONFIGFILE); io = xmlnode_get_list_item(xmlnode_get_tags(greymatter__, "io", namespaces), 0); karma = xmlnode_get_list_item(xmlnode_get_tags(io, "karma", namespaces), 0);
#ifdef SUPPORT_TLS tls = xmlnode_get_list_item(xmlnode_get_tags(io, "tls", namespaces), 0); if (tls == NULL) { tls = xmlnode_get_list_item(xmlnode_get_tags(io, "ssl", namespaces) ,0); if (tls != NULL) { log_warn(NULL, "Please update your configuration. The <ssl/> elements have been renamed to <tls/>. Falling back to use <ssl/> for now: %s", xmlnode_serialize_string(tls, NULL, NULL, 0)); } } if (tls != NULL) { mio_ssl_init(tls); } #endif
- mio__dataはグローバルオブジェクト。NULLの場合は起動時の処理、、って言っても、一回しか呼び出されないけど。
if (mio__data == NULL) {
- karmaのチェックを追加
register_beat(KARMA_HEARTBEAT, _karma_heartbeat, NULL);
/* malloc our instance object */ p = pool_new(); mio__data = pmalloco(p, sizeof(_ios)); mio__data->p = p; mio__data->k = karma_new(p);
- pipe(2)でパイプを作る。
pipe(mio__data->zzz);
/* start main accept/read/write thread */ attr = pth_attr_new();
- このスレッドはjoinしない。
pth_attr_set(attr,PTH_ATTR_JOINABLE,FALSE); #ifdef __CYGWIN__ pth_attr_set(attr,PTH_ATTR_STACK_SIZE, 128*1024); #endif
- 新しいスレッドの生成
mio__data->t=pth_spawn(attr,(void*)_mio_main,NULL); pth_attr_destroy(attr);
- libpthのpth_yieldのマニュアル読んでも英語よくわからん。。。
/* give time to init the signal handlers */ pth_yield(NULL); }
/* where to bounce HTTP requests to */ mio__data->bounce_uri = xmlnode_get_data(xmlnode_get_list_item(xmlnode_get_tags(io, "bounce", namespaces), 0));
- karmaが存際しない場合、既定値で初期化
if (karma != NULL) { mio__data->k->val = j_atoi(xmlnode_get_data(xmlnode_get_list_item(xmlnode_get_tags(karma, "init", namespaces), 0)), KARMA_INIT); mio__data->k->max = j_atoi(xmlnode_get_data(xmlnode_get_list_item(xmlnode_get_tags(karma, "max", namespaces), 0)), KARMA_MAX); mio__data->k->inc = j_atoi(xmlnode_get_data(xmlnode_get_list_item(xmlnode_get_tags(karma, "inc", namespaces), 0)), KARMA_INC); mio__data->k->dec = j_atoi(xmlnode_get_data(xmlnode_get_list_item(xmlnode_get_tags(karma, "dec", namespaces), 0)), KARMA_DEC); mio__data->k->penalty = j_atoi(xmlnode_get_data(xmlnode_get_list_item(xmlnode_get_tags(karma, "penalty", namespaces), 0)), KARMA_PENALTY); mio__data->k->restore = j_atoi(xmlnode_get_data(xmlnode_get_list_item(xmlnode_get_tags(karma, "restore", namespaces), 0)), KARMA_RESTORE); mio__data->k->reset_meter = j_atoi(xmlnode_get_data(xmlnode_get_list_item(xmlnode_get_tags(karma, "resetmeter", namespaces), 0)), KARMA_RESETMETER); }
- rateの初期化
mio__data->rate_t = j_atoi(xmlnode_get_attrib_ns(xmlnode_get_list_item(xmlnode_get_tags(io, "rate", namespaces), 0), "time", NULL), 0); mio__data->rate_p = j_atoi(xmlnode_get_attrib_ns(xmlnode_get_list_item(xmlnode_get_tags(io, "rate", namespaces), 0), "points", NULL), 0);
xhash_free(namespaces); }
呼出元
#related: relatedプラグインは廃止されました。