Apache-Scoreboard
view release on metacpan or search on metacpan
Scoreboard.xs view on Meta::CPAN
ptr += SIZE16;
image->thread_limit = unpack16(ptr);
ptr += SIZE16;
/* MY_WARN
"recv: sizes server_num=%d, thread_num=%d, psize=%d, "
"ssize=%d\n",
image->server_limit, image->thread_limit, psize, ssize);
*/
sb = (scoreboard *)apr_palloc(pool, sizeof(scoreboard) +
image->server_limit * sizeof(worker_score *));
sb->parent = (process_score *)Copy_pool(pool, ptr, psize, char);
ptr += psize;
sb->servers = (worker_score **)((char*)sb + sizeof(scoreboard));
for (i = 0; i < image->server_limit; i++) {
sb->servers[i] = (worker_score *)Copy_pool(pool, ptr,
image->thread_limit * sizeof(worker_score), char);
ptr += image->thread_limit * sizeof(worker_score);
}
sb->global = (global_score *)Copy_pool(pool, ptr,
sizeof(global_score), char);
image->pool = pool;
image->sb = sb;
/* debug_dump_sb(image); */
RETVAL = image;
OUTPUT:
RETVAL
SV *
image(CLASS, pool_sv)
SV *CLASS
SV *pool_sv
INIT:
modperl_scoreboard_t *image;
apr_pool_t *pool = mp_xs_sv2_APR__Pool(pool_sv);
CODE:
image_sanity_check(aTHX);
image = (modperl_scoreboard_t *)apr_palloc(pool, sizeof(*image));
if (ap_exists_scoreboard_image()) {
image->sb = ap_scoreboard_image;
image->pool = pool;
ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &(image->server_limit));
ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &(image->thread_limit));
}
else {
Perl_croak(aTHX_ "ap_scoreboard_image doesn't exist");
}
RETVAL = sv_setref_pv(NEWSV(0, 0), "Apache::Scoreboard", (void*)image);
/* make sure the pool sticks around as long as this object is alive */
mpxs_add_pool_magic(RETVAL, pool_sv);
CLASS = CLASS; /* avoid warnings */
OUTPUT:
RETVAL
int
server_limit(image)
Apache::Scoreboard image
int
thread_limit(image)
Apache::Scoreboard image
Apache::ScoreboardParentScore
parent_score(image, idx=0)
Apache::Scoreboard image
int idx
PREINIT:
process_score *ps;
CODE:
ps = my_get_scoreboard_process(aTHX_ image, idx);
/* XXX */
if (!ps->quiescing && ps->pid) {
RETVAL = (modperl_parent_score_t *)apr_pcalloc(image->pool,
(sizeof(*RETVAL)));
RETVAL->record = ps;
RETVAL->idx = idx;
RETVAL->image = image;
}
else {
XSRETURN_UNDEF;
}
OUTPUT:
RETVAL
Apache::ScoreboardWorkerScore
worker_score(image, parent_idx, worker_idx)
Apache::Scoreboard image
int parent_idx
int worker_idx
PREINIT:
worker_score *ws;
CODE:
ws = my_get_scoreboard_worker(aTHX_ image, parent_idx, worker_idx);
RETVAL = (modperl_worker_score_t *)apr_pcalloc(image->pool,
(sizeof(*RETVAL)));
RETVAL->parent_idx = parent_idx;
RETVAL->worker_idx = worker_idx;
RETVAL->record = ws;
OUTPUT:
( run in 2.026 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )