library: reorder (alphabetize) some things, <PIDS> api
Without breaking either ABI or API just rearrange some stuff to provide a little more consistent source file. [ these were prompted by some work on the <stat> API ] [ in preparation for him borrowing some of our code. ] Reference(s): Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
40de1c9c7c
commit
8c38a58d94
156
proc/pids.c
156
proc/pids.c
@ -45,7 +45,7 @@
|
|||||||
#include "wchan.h" // ( maybe just temporary? )
|
#include "wchan.h" // ( maybe just temporary? )
|
||||||
|
|
||||||
//#define UNREF_RPTHASH // report on hashing, at uref time
|
//#define UNREF_RPTHASH // report on hashing, at uref time
|
||||||
//#define FPRINT_STACKS // enable validate_stacks output
|
//#define FPRINT_STACKS // enable fprint_stacks output
|
||||||
|
|
||||||
#define FILL_ID_MAX 255 // upper limit for pid/uid fills
|
#define FILL_ID_MAX 255 // upper limit for pid/uid fills
|
||||||
#define MEMORY_INCR 128 // amt by which allocations grow
|
#define MEMORY_INCR 128 // amt by which allocations grow
|
||||||
@ -848,6 +848,59 @@ static int extent_free (
|
|||||||
} // end: extent_free
|
} // end: extent_free
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FPRINT_STACKS
|
||||||
|
static void fprint_stacks (
|
||||||
|
void *stacks,
|
||||||
|
const char *who)
|
||||||
|
{
|
||||||
|
#include <stdio.h>
|
||||||
|
static int once = 0;
|
||||||
|
struct stacks_extent *ext = stacks;
|
||||||
|
int i, t, x, n = 0;
|
||||||
|
|
||||||
|
fprintf(stderr, " %s: called by '%s'\n", __func__, who);
|
||||||
|
fprintf(stderr, " %s: ext_numitems = %d, ext_numstacks = %d, extents = %p, next = %p\n", __func__, ext->ext_numitems, ext->ext_numstacks, ext, ext->next);
|
||||||
|
fprintf(stderr, " %s: stacks_extent results excluding the end-of-stack element ...\n", __func__);
|
||||||
|
for (x = 0; NULL != ext->stacks[x]; x++) {
|
||||||
|
struct pids_stack *h = ext->stacks[x];
|
||||||
|
struct pids_result *r = h->head;
|
||||||
|
fprintf(stderr, " %s: v[%03d] = %p, h = %p", __func__, x, h, r);
|
||||||
|
for (i = 0; r->item < PROCPS_PIDS_logical_end; i++, r++)
|
||||||
|
;
|
||||||
|
t = i + 1;
|
||||||
|
fprintf(stderr, " - found %d elements for stack %d\n", i, n);
|
||||||
|
++n;
|
||||||
|
}
|
||||||
|
if (!once) {
|
||||||
|
fprintf(stderr, " %s: found %d total stack(s), each %d bytes (including eos)\n", __func__, x, (int)(sizeof(struct pids_stack) + (sizeof(struct pids_result) * t)));
|
||||||
|
fprintf(stderr, " %s: sizeof(struct pids_stack) = %d\n", __func__, (int)sizeof(struct pids_stack));
|
||||||
|
fprintf(stderr, " %s: sizeof(struct pids_result) = %d\n", __func__, (int)sizeof(struct pids_result));
|
||||||
|
fprintf(stderr, " %s: sizeof(struct stacks_extent) = %d\n", __func__, (int)sizeof(struct stacks_extent));
|
||||||
|
once = 1;
|
||||||
|
}
|
||||||
|
fputc('\n', stderr);
|
||||||
|
return;
|
||||||
|
} // end: fprint_stacks
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static inline struct pids_result *itemize_stack (
|
||||||
|
struct pids_result *p,
|
||||||
|
int depth,
|
||||||
|
enum pids_item *items)
|
||||||
|
{
|
||||||
|
struct pids_result *p_sav = p;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < depth; i++) {
|
||||||
|
p->item = items[i];
|
||||||
|
p->result.ull_int = 0;
|
||||||
|
++p;
|
||||||
|
}
|
||||||
|
return p_sav;
|
||||||
|
} // end: itemize_stack
|
||||||
|
|
||||||
|
|
||||||
static inline int items_check_failed (
|
static inline int items_check_failed (
|
||||||
int maxitems,
|
int maxitems,
|
||||||
enum pids_item *items)
|
enum pids_item *items)
|
||||||
@ -932,24 +985,7 @@ static inline int oldproc_open (
|
|||||||
} // end: oldproc_open
|
} // end: oldproc_open
|
||||||
|
|
||||||
|
|
||||||
static inline struct pids_result *stack_itemize (
|
static inline int proc_tally (
|
||||||
struct pids_result *p,
|
|
||||||
int depth,
|
|
||||||
enum pids_item *items)
|
|
||||||
{
|
|
||||||
struct pids_result *p_sav = p;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < depth; i++) {
|
|
||||||
p->item = items[i];
|
|
||||||
p->result.ull_int = 0;
|
|
||||||
++p;
|
|
||||||
}
|
|
||||||
return p_sav;
|
|
||||||
} // end: stack_itemize
|
|
||||||
|
|
||||||
|
|
||||||
static inline int tally_proc (
|
|
||||||
struct procps_pidsinfo *info,
|
struct procps_pidsinfo *info,
|
||||||
struct pids_counts *counts,
|
struct pids_counts *counts,
|
||||||
proc_t *p)
|
proc_t *p)
|
||||||
@ -976,51 +1012,11 @@ static inline int tally_proc (
|
|||||||
if (info->history_yes)
|
if (info->history_yes)
|
||||||
return !make_hist(info, p);
|
return !make_hist(info, p);
|
||||||
return 1;
|
return 1;
|
||||||
} // end: tally_proc
|
} // end: proc_tally
|
||||||
|
|
||||||
|
|
||||||
#ifdef FPRINT_STACKS
|
|
||||||
static void validate_stacks (
|
|
||||||
void *stacks,
|
|
||||||
const char *who)
|
|
||||||
{
|
|
||||||
#include <stdio.h>
|
|
||||||
static int once = 0;
|
|
||||||
struct stacks_extent *ext = stacks;
|
|
||||||
int i, t, x, n = 0;
|
|
||||||
|
|
||||||
fprintf(stderr, " %s: called by '%s'\n", __func__, who);
|
|
||||||
fprintf(stderr, " %s: ext_numitems = %d, ext_numstacks = %d, extents = %p, next = %p\n", __func__, ext->ext_numitems, ext->ext_numstacks, ext, ext->next);
|
|
||||||
fprintf(stderr, " %s: stacks_extent results excluding the end-of-stack element ...\n", __func__);
|
|
||||||
for (x = 0; NULL != ext->stacks[x]; x++) {
|
|
||||||
struct pids_stack *h = ext->stacks[x];
|
|
||||||
struct pids_result *r = h->head;
|
|
||||||
fprintf(stderr, " %s: v[%03d] = %p, h = %p", __func__, x, h, r);
|
|
||||||
for (i = 0; r->item < PROCPS_PIDS_logical_end; i++, r++)
|
|
||||||
;
|
|
||||||
t = i + 1;
|
|
||||||
fprintf(stderr, " - found %d elements for stack %d\n", i, n);
|
|
||||||
++n;
|
|
||||||
}
|
|
||||||
if (!once) {
|
|
||||||
fprintf(stderr, " %s: found %d total stack(s), each %d bytes (including eos)\n", __func__, x, (int)(sizeof(struct pids_stack) + (sizeof(struct pids_result) * t)));
|
|
||||||
fprintf(stderr, " %s: sizeof(struct pids_stack) = %d\n", __func__, (int)sizeof(struct pids_stack));
|
|
||||||
fprintf(stderr, " %s: sizeof(struct pids_result) = %d\n", __func__, (int)sizeof(struct pids_result));
|
|
||||||
fprintf(stderr, " %s: sizeof(struct stacks_extent) = %d\n", __func__, (int)sizeof(struct stacks_extent));
|
|
||||||
once = 1;
|
|
||||||
}
|
|
||||||
fputc('\n', stderr);
|
|
||||||
return;
|
|
||||||
} // end: validate_stacks
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// ___ Special Temporary Section |||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||
// [ contains former public functions and other dependent routine(s) while we ]
|
|
||||||
// [ resist using forward declarations yet still maintain an alphabetic order ]
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* alloc_stacks():
|
* stacks_alloc():
|
||||||
*
|
*
|
||||||
* Allocate and initialize one or more stacks each of which is anchored in an
|
* Allocate and initialize one or more stacks each of which is anchored in an
|
||||||
* associated pids_stack structure.
|
* associated pids_stack structure.
|
||||||
@ -1030,7 +1026,7 @@ static void validate_stacks (
|
|||||||
*
|
*
|
||||||
* Returns an array of pointers representing the 'heads' of each new stack.
|
* Returns an array of pointers representing the 'heads' of each new stack.
|
||||||
*/
|
*/
|
||||||
static struct stacks_extent *alloc_stacks (
|
static struct stacks_extent *stacks_alloc (
|
||||||
struct procps_pidsinfo *info,
|
struct procps_pidsinfo *info,
|
||||||
int maxstacks)
|
int maxstacks)
|
||||||
{
|
{
|
||||||
@ -1057,7 +1053,7 @@ static struct stacks_extent *alloc_stacks (
|
|||||||
|
|
||||||
/* note: all memory is allocated in a single blob, facilitating a later free().
|
/* note: all memory is allocated in a single blob, facilitating a later free().
|
||||||
as a minimum, it's important that the result structures themselves always be
|
as a minimum, it's important that the result structures themselves always be
|
||||||
contiguous for any given stack (just as they are when defined statically). */
|
contiguous for each stack since they're accessed through relative position). */
|
||||||
if (NULL == (p_blob = calloc(1, blob_size)))
|
if (NULL == (p_blob = calloc(1, blob_size)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -1070,7 +1066,7 @@ static struct stacks_extent *alloc_stacks (
|
|||||||
|
|
||||||
for (i = 0; i < maxstacks; i++) {
|
for (i = 0; i < maxstacks; i++) {
|
||||||
p_head = (struct pids_stack *)v_head;
|
p_head = (struct pids_stack *)v_head;
|
||||||
p_head->head = stack_itemize((struct pids_result *)v_list, info->curitems, info->items);
|
p_head->head = itemize_stack((struct pids_result *)v_list, info->curitems, info->items);
|
||||||
p_blob->stacks[i] = p_head;
|
p_blob->stacks[i] = p_head;
|
||||||
v_list += list_size;
|
v_list += list_size;
|
||||||
v_head += head_size;
|
v_head += head_size;
|
||||||
@ -1078,13 +1074,13 @@ static struct stacks_extent *alloc_stacks (
|
|||||||
p_blob->ext_numitems = info->maxitems;
|
p_blob->ext_numitems = info->maxitems;
|
||||||
p_blob->ext_numstacks = maxstacks;
|
p_blob->ext_numstacks = maxstacks;
|
||||||
#ifdef FPRINT_STACKS
|
#ifdef FPRINT_STACKS
|
||||||
validate_stacks(p_blob, __func__);
|
fprint_stacks(p_blob, __func__);
|
||||||
#endif
|
#endif
|
||||||
return p_blob;
|
return p_blob;
|
||||||
} // end: alloc_stacks
|
} // end: stacks_alloc
|
||||||
|
|
||||||
|
|
||||||
static int dealloc_stacks (
|
static int stacks_dealloc (
|
||||||
struct procps_pidsinfo *info,
|
struct procps_pidsinfo *info,
|
||||||
struct stacks_extent **these)
|
struct stacks_extent **these)
|
||||||
{
|
{
|
||||||
@ -1100,10 +1096,10 @@ static int dealloc_stacks (
|
|||||||
rc = extent_free(info, ext);
|
rc = extent_free(info, ext);
|
||||||
*these = NULL;
|
*these = NULL;
|
||||||
return rc;
|
return rc;
|
||||||
} // end: dealloc_stacks
|
} // end: stacks_dealloc
|
||||||
|
|
||||||
|
|
||||||
static int fetch_helper (
|
static int stacks_fetch (
|
||||||
struct procps_pidsinfo *info,
|
struct procps_pidsinfo *info,
|
||||||
struct fetch_support *this)
|
struct fetch_support *this)
|
||||||
{
|
{
|
||||||
@ -1119,7 +1115,7 @@ static int fetch_helper (
|
|||||||
if (!this->anchor) {
|
if (!this->anchor) {
|
||||||
if ((!(this->anchor = calloc(sizeof(void *), MEMORY_INCR)))
|
if ((!(this->anchor = calloc(sizeof(void *), MEMORY_INCR)))
|
||||||
|| (!(this->summary.stacks = calloc(sizeof(void *), MEMORY_INCR)))
|
|| (!(this->summary.stacks = calloc(sizeof(void *), MEMORY_INCR)))
|
||||||
|| (!(ext = alloc_stacks(info, MEMORY_INCR))))
|
|| (!(ext = stacks_alloc(info, MEMORY_INCR))))
|
||||||
return -1;
|
return -1;
|
||||||
memcpy(this->anchor, ext->stacks, sizeof(void *) * MEMORY_INCR);
|
memcpy(this->anchor, ext->stacks, sizeof(void *) * MEMORY_INCR);
|
||||||
n_alloc = MEMORY_INCR;
|
n_alloc = MEMORY_INCR;
|
||||||
@ -1135,11 +1131,11 @@ static int fetch_helper (
|
|||||||
if (!(n_inuse < n_alloc)) {
|
if (!(n_inuse < n_alloc)) {
|
||||||
n_alloc += MEMORY_INCR;
|
n_alloc += MEMORY_INCR;
|
||||||
if ((!(this->anchor = realloc(this->anchor, sizeof(void *) * n_alloc)))
|
if ((!(this->anchor = realloc(this->anchor, sizeof(void *) * n_alloc)))
|
||||||
|| (!(ext = alloc_stacks(info, MEMORY_INCR))))
|
|| (!(ext = stacks_alloc(info, MEMORY_INCR))))
|
||||||
return -1;
|
return -1;
|
||||||
memcpy(this->anchor + n_inuse, ext->stacks, sizeof(void *) * MEMORY_INCR);
|
memcpy(this->anchor + n_inuse, ext->stacks, sizeof(void *) * MEMORY_INCR);
|
||||||
}
|
}
|
||||||
if (!tally_proc(info, &this->summary.counts, &task))
|
if (!proc_tally(info, &this->summary.counts, &task))
|
||||||
return -1;
|
return -1;
|
||||||
assign_results(info, this->anchor[n_inuse++], &task);
|
assign_results(info, this->anchor[n_inuse++], &task);
|
||||||
}
|
}
|
||||||
@ -1153,7 +1149,7 @@ static int fetch_helper (
|
|||||||
return n_inuse; // callers beware, this might be zero !
|
return n_inuse; // callers beware, this might be zero !
|
||||||
#undef n_alloc
|
#undef n_alloc
|
||||||
#undef n_inuse
|
#undef n_inuse
|
||||||
} // end: fetch_helper
|
} // end: stacks_fetch
|
||||||
|
|
||||||
|
|
||||||
// ___ Public Functions |||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
// ___ Public Functions |||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
@ -1172,7 +1168,7 @@ PROCPS_EXPORT struct pids_stack *fatal_proc_unmounted (
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (info == NULL
|
if (info == NULL
|
||||||
|| !(ext = alloc_stacks(info, 1))
|
|| !(ext = stacks_alloc(info, 1))
|
||||||
|| !extent_cut(info, ext))
|
|| !extent_cut(info, ext))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -1267,7 +1263,7 @@ PROCPS_EXPORT int procps_pids_read_open (
|
|||||||
if (which != PROCPS_REAP_TASKS_ONLY && which != PROCPS_REAP_THREADS_TOO)
|
if (which != PROCPS_REAP_TASKS_ONLY && which != PROCPS_REAP_THREADS_TOO)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (!(info->read = alloc_stacks(info, 1)))
|
if (!(info->read = stacks_alloc(info, 1)))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
if (!oldproc_open(info, 0))
|
if (!oldproc_open(info, 0))
|
||||||
return -1;
|
return -1;
|
||||||
@ -1282,7 +1278,7 @@ PROCPS_EXPORT int procps_pids_read_shut (
|
|||||||
if (info == NULL || ! READS_BEGUN)
|
if (info == NULL || ! READS_BEGUN)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
oldproc_close(info);
|
oldproc_close(info);
|
||||||
return dealloc_stacks(info, &info->read);
|
return stacks_dealloc(info, &info->read);
|
||||||
} // end: procps_pids_read_shut
|
} // end: procps_pids_read_shut
|
||||||
|
|
||||||
|
|
||||||
@ -1310,7 +1306,7 @@ PROCPS_EXPORT struct pids_reap *procps_pids_reap (
|
|||||||
return NULL;
|
return NULL;
|
||||||
info->read_something = which ? readeither : readproc;
|
info->read_something = which ? readeither : readproc;
|
||||||
|
|
||||||
rc = fetch_helper(info, &info->reap);
|
rc = stacks_fetch(info, &info->reap);
|
||||||
|
|
||||||
oldproc_close(info);
|
oldproc_close(info);
|
||||||
// we better have found at least 1 pid
|
// we better have found at least 1 pid
|
||||||
@ -1363,9 +1359,9 @@ PROCPS_EXPORT int procps_pids_reset (
|
|||||||
ext = info->extents;
|
ext = info->extents;
|
||||||
while (ext) {
|
while (ext) {
|
||||||
for (i = 0; ext->stacks[i]; i++)
|
for (i = 0; ext->stacks[i]; i++)
|
||||||
stack_itemize(ext->stacks[i]->head, info->curitems, info->items);
|
itemize_stack(ext->stacks[i]->head, info->curitems, info->items);
|
||||||
#ifdef FPRINT_STACKS
|
#ifdef FPRINT_STACKS
|
||||||
validate_stacks(ext, __func__);
|
fprint_stacks(ext, __func__);
|
||||||
#endif
|
#endif
|
||||||
ext = ext->next;
|
ext = ext->next;
|
||||||
};
|
};
|
||||||
@ -1406,7 +1402,7 @@ PROCPS_EXPORT struct pids_reap *procps_pids_select (
|
|||||||
return NULL;
|
return NULL;
|
||||||
info->read_something = readproc;
|
info->read_something = readproc;
|
||||||
|
|
||||||
rc = fetch_helper(info, &info->select);
|
rc = stacks_fetch(info, &info->select);
|
||||||
|
|
||||||
oldproc_close(info);
|
oldproc_close(info);
|
||||||
// no guarantee any pids/uids were found
|
// no guarantee any pids/uids were found
|
||||||
|
Loading…
Reference in New Issue
Block a user