void fc_pool_close(fc_pool_t *pool) { fc_pool_t *tmp; struct fc_large_data_s *l; for (l = pool->large; l != NULL; l = l->next) { if (l->data == NULL) continue; fc_log_debug(pool->log, FC_LOG_DEBUG, "free: %p", l->data); fc_free(l->data); } for (; pool != NULL; pool = tmp) { tmp = pool->d.next; // because pool->log will not be allocated // in the pool. fc_log_debug(pool->log, FC_LOG_DEBUG, "free pool: %p, unused: %zu", pool, pool->d.end - pool->d.last); fc_free(pool); } }
void fc_pfree(fc_pool_t *pool, void *ptr) { struct fc_large_data_s *l; for (l = pool->large; l != NULL; l = l->next) { if (l->data != ptr) continue; fc_log_debug(pool->log, FC_LOG_DEBUG, "free: %p", l->data); fc_free(l->data); l->data = NULL; return; } }
void event_deinit(struct context *ctx) { int status; ASSERT(ctx->ep >= 0); fc_free(ctx->event); status = close(ctx->ep); if (status < 0) { log_error("close e %d failed, ignored: %s", ctx->ep, strerror(errno)); } ctx->ep = -1; }
void *fc_pmemalign(fc_pool_t *pool, size_t size, size_t alignment) { void *p; struct fc_large_data_s *l; p = fc_memalign(alignment, size, pool->log); if (p == NULL) { return NULL; } l = fc_palloc(pool, sizeof(struct fc_large_data_s)); if (l == NULL) { fc_free(p); return NULL; } l->data = p; l->next = pool->large; pool->large = l; return p; }