mpctx->lock = lock;
}
+#if __SANITIZE_ADDRESS__
+void *
+isc__mempool_get(isc_mempool_t *mpctx0 FLARG) {
+ void *item = NULL;
+
+ REQUIRE(VALID_MEMPOOL(mpctx0));
+
+ isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
+ isc_mem_t *mctx = (isc_mem_t *)mpctx->mctx;
+
+ if (mpctx->lock != NULL) {
+ LOCK(mpctx->lock);
+ }
+
+ /*
+ * Don't let the caller go over quota
+ */
+ if (ISC_UNLIKELY(mpctx->allocated >= mpctx->maxalloc)) {
+ goto out;
+ }
+
+ item = isc__mem_get(mctx, mpctx->size FLARG_PASS);
+ mpctx->gets++;
+ mpctx->allocated++;
+
+out:
+ if (mpctx->lock != NULL) {
+ UNLOCK(mpctx->lock);
+ }
+
+ return (item);
+}
+
+void
+isc__mempool_put(isc_mempool_t *mpctx0, void *mem FLARG) {
+ REQUIRE(VALID_MEMPOOL(mpctx0));
+
+ isc__mempool_t *mpctx = (isc__mempool_t *)mpctx0;
+ isc_mem_t *mctx = (isc_mem_t *)mpctx->mctx;
+
+ REQUIRE(mem != NULL);
+
+ if (mpctx->lock != NULL) {
+ LOCK(mpctx->lock);
+ }
+
+ INSIST(mpctx->allocated > 0);
+ mpctx->allocated--;
+
+ isc__mem_put(mctx, mem, mpctx->size FLARG_PASS);
+
+ if (mpctx->lock != NULL) {
+ UNLOCK(mpctx->lock);
+ }
+}
+
+#else /* __SANITIZE_ADDRESS__ */
void *
isc__mempool_get(isc_mempool_t *mpctx0 FLARG) {
REQUIRE(VALID_MEMPOOL(mpctx0));
}
}
+#endif /* __SANITIZE_ADDRESS__ */
+
/*
* Quotas
*/
items1[i] = NULL;
}
+#if !__SANITIZE_ADDRESS__
rval = isc_mempool_getfreecount(mp1);
assert_int_equal(rval, 10);
+#endif /* !__SANITIZE_ADDRESS__ */
rval = isc_mempool_getallocated(mp1);
assert_int_equal(rval, 19);