if $t[$i].val == (void *)0L
printf "[%u] '%s'=>NULL\n", $i, $t[$i].key
else
- printf "[%u] '%s'='%s'\n", $i, $t[$i].key, $t[$i].val
+ printf "[%u] '%s'='%s' [%p]\n", $i, $t[$i].key, $t[$i].val, $t[$i].val
end
set $i = $i + 1
end
Print the key/value pairs in a table.
end
+define dump_skiplist
+ set $sl = (apr_skiplist *)$arg0
+ set $m = $sl->bottom
+ printf "skiplist@%p: size=%lu: height=%d\n", $sl, $sl->size, $sl->height
+ while ($m)
+ printf "(%p,%.12lx)", $m, $m->data
+ set $u = $m->up
+ while ($u)
+ printf " (%p,%.12lx)", $u, $u->data
+ set $u = $u->up
+ end
+ printf "\n"
+ set $m = $m->next
+ end
+end
+document dump_skiplist
+ Print the nodes/values in a skiplist
+end
+
define dump_string_hash
set $h = $arg0->array
set $n = $arg0->max
Print filter chain info
end
+define dump_filter_chain
+ set $r = $arg0
+ set $f = $r->output_filters
+ while $f
+ if $f == $r->output_filters
+ printf "r->output_filters =>\n"
+ end
+ if $f == $r->proto_output_filters
+ printf "r->proto_output_filters =>\n"
+ end
+ if $f == $r->connection->output_filters
+ printf "r->connection->output_filters =>\n"
+ end
+
+ printf " %s(0x%lx): type=%d, ctx=0x%lx, r=%s(0x%lx), c=0x%lx\n", \
+ $f->frec->name, (unsigned long)$f, $f->frec->ftype, (unsigned long)$f->ctx, \
+ $f->r == $r ? "r" : ($f->r == 0L ? "null" : \
+ ($f->r == $r->main ? "r->main" : \
+ ($r->main && $f->r == $r->main->main ? "r->main->main" : "????"))), \
+ $f->r, $f->c
+
+ set $f = $f->next
+ end
+end
+document dump_filter_chain
+ Print filter chain info given a request_rec pointer
+end
+
define dump_process_rec
set $p = $arg0
printf "process_rec=0x%lx:\n", (unsigned long)$p
Print server_rec list info
end
+define dump_request_tree
+ set $r = $arg0
+ set $i
+ while $r
+ printf "r=(0x%lx): uri=%s, handler=%s, r->main=0x%lx\n", \
+ $r, $r->unparsed_uri, $r->handler ? $r->handler : "(none)", $r->main
+ set $r = $r->main
+ end
+end
+
define dump_allocator
printf "Allocator current_free_index = %d, max_free_index = %d\n", \
($arg0)->current_free_index, ($arg0)->max_free_index
printf "Allocator free list:\n"
set $i = 0
set $max =(sizeof $arg0->free)/(sizeof $arg0->free[0])
+ set $kb = 0
while $i < $max
set $node = $arg0->free[$i]
if $node != 0
printf " #%2d: ", $i
while $node != 0
- printf "%d, ", $node->endp - $node->first_avail
+ printf "%d, ", 4096 << $node->index
+ set $kb = $kb + (4 << $node->index)
set $node = $node->next
end
printf "ends.\n"
end
set $i = $i + 1
end
+ printf "Sum of free blocks: %dkiB\n", $kb
end
document dump_allocator
Print status of an allocator and its freelists.
end
+define dump_one_pool
+ set $p = $arg0
+ set $size = 0
+ set $free = 0
+ set $nodes = 0
+ set $node = $arg0->active
+ set $done = 0
+ while $done == 0
+ set $size = $size + (4096 << $node->index)
+ set $free = $free + ($node->endp - $node->first_avail)
+ set $nodes = $nodes + 1
+ set $node = $node->next
+ if $node == $arg0->active
+ set $done = 1
+ end
+ end
+ printf "Pool '%s' [%p]: %d/%d free (%d blocks)\n", $p->tag, $p, $free, $size, $nodes
+end
+
# Set sane defaults for common signals:
handle SIGPIPE noprint pass nostop
handle SIGUSR1 print pass nostop