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:
Jim Warner 2016-04-25 00:00:00 -05:00 committed by Craig Small
parent 40de1c9c7c
commit 8c38a58d94

View File

@ -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