■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50
read.cgi再開発スレ
- 440 : ◆cZfSunOs.U :04/12/07 07:25:30 ID:4/kWaSl/
- >>435 設定情報は確かにそういうやり方の方がスマートかも知れませんね.
ただ,それなら今ある仕組みのままでも,SetEnv 使えば DSO プログラム側から
apr_table_get(r->subprocess_env, "key") で取り出せます.
一方,広告テキストなどはさすがに httpd.conf に書き連ねるのは......
ってことで,こちらはファイルから読み込んで server pool に突っ込んでおく
のが良さそうですね.だいたいこんな感じでしょうか.
----[read.h に追加]---------------------------------------------------
#include <pthread.h>
#include "apr_pools.h"
#include "apr_thread_rwlock.h"
----[read2ch.h に追加]------------------------------------------------
#define AD_FILENAME "ad.txt"
#define AD_CHECK_INTERVAL 60
----[read.c はこんな感じに]-------------------------------------------
:
typedef struct {
apr_thread_rwlock_t *rwlock;
volatile apr_time_t lastchecked, mtime;
apr_pool_t *pool;
apr_mmap_t *m;
} ad_pool_t;
:
static ad_pool_t *get_ad_pool(request_rec *r, const char *ad_key)
{
/* APR mutex には静的初期化マクロが用意されていないので,ここは pthread mutex を使用 */
static pthread_mutex_t ad_mutex = PTHREAD_MUTEX_INITIALIZER;
ad_pool_t *ad_pool, **ad_poolp = &ad_pool;
apr_pool_t *p = r->server->process->pool;
apr_pool_userdata_get((void **)ad_poolp, ad_key, p);
if (!ad_pool) {
pthread_mutex_lock(&ad_mutex);
apr_pool_userdata_get((void **)ad_poolp, ad_key, p);
if (!ad_pool) {
ad_pool = apr_palloc(p, sizeof *ad_pool);
ad_pool->lastchecked = ad_pool->mtime = 0;
if (apr_thread_rwlock_create(&ad_pool->rwlock, p)
|| apr_pool_create(&ad_pool->pool, p))
ad_pool = NULL;
else
apr_pool_userdata_set(ad_pool, ad_key, apr_pool_cleanup_null, p);
}
pthread_mutex_unlock(&ad_mutex);
}
return ad_pool;
}
235KB
新着レスの表示
スレッドリストへ戻る 全部 前100 次100 最新50
0ch BBS 2004-10-30