* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
* \brief The isc_quota_t object is a simple helper object for implementing
* quotas on things like the number of simultaneous connections to
* a server. It keeps track of the amount of quota in use, and
* encapsulates the locking necessary to allow multiple tasks to
/*% isc_quota structure */
isc_mutex_t lock; /*%< Locked by lock. */
isc_quota_init(isc_quota_t *quota, int max);
* Initialize a quota object.
* Other error Lock creation failed.
isc_quota_destroy(isc_quota_t *quota);
* Destroy a quota object.
isc_quota_soft(isc_quota_t *quota, int soft);
isc_quota_max(isc_quota_t *quota, int max);
* Re-set a maximum quota.
isc_quota_reserve(isc_quota_t *quota);
* Attempt to reserve one unit of 'quota'.
* \li #ISC_R_SUCCESS Success
* \li #ISC_R_SOFTQUOTA Success soft quota reached
* \li #ISC_R_QUOTA Quota is full
isc_quota_release(isc_quota_t *quota);
* Release one unit of quota.
isc_quota_attach(isc_quota_t *quota, isc_quota_t **p);
* Like isc_quota_reserve, and also attaches '*p' to the
* quota if successful (ISC_R_SUCCESS or ISC_R_SOFTQUOTA).
isc_quota_force(isc_quota_t *quota, isc_quota_t **p);
* Like isc_quota_attach, but will attach '*p' to the quota
* even if the hard quota has been exceeded.
isc_quota_detach(isc_quota_t **p);
* Like isc_quota_release, and also detaches '*p' from the
isc_quota_getused(isc_quota_t *quota);
* Get the current usage of quota.