void pfl_heap_add(struct pfl_heap *ph, void *c) { struct pfl_heap_entry *che, *phe; size_t nalloc; void *p; psc_assert(c); che = PSC_AGP(c, ph->ph_entoff); if (ph->ph_nitems == ph->ph_nalloc) { nalloc = MAX(8, 2 * ph->ph_nalloc); ph->ph_base = psc_realloc(ph->ph_base, nalloc * sizeof(void *), 0); ph->ph_nalloc = nalloc; } ph->ph_base[che->phe_idx = ph->ph_nitems++] = c; /* bubble up */ while (che->phe_idx > 0) { p = ph->ph_base[(che->phe_idx - 1) / 2]; if (ph->ph_cmpf(p, c) != 1) break; phe = PSC_AGP(p, ph->ph_entoff); _pfl_heap_swap(ph, phe, che); } }
void psc_subsys_register(int ssid, const char *name) { struct psc_subsys *ss; char *p, buf[BUFSIZ]; int nss; nss = psc_dynarray_len(&psc_subsystems); ss = psc_alloc(sizeof(*ss), PAF_NOLOG); ss->pss_name = name; snprintf(buf, sizeof(buf), "PSC_LOG_LEVEL_%s", name); p = getenv(buf); if (p) { ss->pss_loglevel = psc_loglevel_fromstr(p); if (ss->pss_loglevel == PNLOGLEVELS) psc_fatalx("invalid %s value", name); } else { ss->pss_loglevel = psc_log_getlevel_global(); if (ssid == PSS_TMP) ss->pss_loglevel = PLL_DEBUG; } snprintf(buf, sizeof(buf), "PSC_SYSLOG_%s", name); if (getenv(buf) || getenv("PSC_SYSLOG")) { static int init; if (!init) { extern const char *__progname; const char *ident = __progname; init = 1; p = getenv("PFL_SYSLOG_IDENT"); if (p) { static char idbuf[32]; ident = idbuf; (void)FMTSTR(idbuf, sizeof(idbuf), p, FMTSTRCASE('n', "s", __progname) ); } openlog(ident, LOG_CONS | LOG_NDELAY | LOG_PID, LOG_DAEMON); } pfl_syslog = psc_realloc(pfl_syslog, sizeof(*pfl_syslog) * (nss + 1), PAF_NOLOG); pfl_syslog[nss] = 1; } if (ssid != nss) psc_fatalx("bad ID %d for subsys %s [want %d], " "check order", ssid, name, nss); psc_dynarray_add(&psc_subsystems, ss); }
int main(int argc, char *argv[]) { size_t sz; void *p; pfl_init(); if (getopt(argc, argv, "") != -1) usage(); argc -= optind; if (argc) usage(); p = PSCALLOC(213); p = psc_realloc(p, 65536, 0); p = psc_realloc(p, 0, 0); p = psc_realloc(p, 128, 0); p = psc_realloc(p, 0, 0); PSCFREE(p); p = PSCALLOC(128); PSCFREE(p); p = psc_alloc(24, PAF_PAGEALIGN); psc_free(p, PAF_PAGEALIGN); p = PSCALLOC(24); p = psc_realloc(p, 128, 0); PSCFREE(p); p = psc_alloc(8, PAF_LOCK); *(uint64_t *)p = 0; psc_free(p, PAF_LOCK, (size_t)8); sz = 1024; p = psc_alloc(sz, PAF_LOCK | PAF_PAGEALIGN); memset(p, 0, sz); psc_free(p, PAF_LOCK | PAF_PAGEALIGN, sz); exit(0); }
static void pfl_odt_zerobuf_ensurelen(size_t len) { static psc_spinlock_t zerobuf_lock = SPINLOCK_INIT; static size_t zerobuf_len; if (len <= zerobuf_len) return; spinlock(&zerobuf_lock); if (len > zerobuf_len) { pfl_odt_zerobuf = psc_realloc(pfl_odt_zerobuf, len, 0); zerobuf_len = len; } freelock(&zerobuf_lock); }
/* * Resize a dynamic array. * @pda: dynamic array to resize. * @n: size. * Returns -1 on failure and zero on success. */ int _psc_dynarray_resize(struct psc_dynarray *pda, int n) { int i, flags; void *p; flags = 0; if (pda->pda_flags & PDAF_NOLOG) flags |= PAF_NOLOG; p = psc_realloc(pda->pda_items, n * sizeof(*pda->pda_items), flags); pda->pda_items = p; /* Initialize any new slots to zero. */ for (i = pda->pda_nalloc; i < n; i++) pda->pda_items[i] = NULL; pda->pda_nalloc = n; return (0); }