id_manager: Use limits given by TKM
This commit is contained in:
committed by
Tobias Brunner
parent
50e35e66d2
commit
84967b4439
@@ -44,6 +44,11 @@ struct private_tkm_id_manager_t {
|
|||||||
*/
|
*/
|
||||||
bool* ctxids[TKM_CTX_MAX];
|
bool* ctxids[TKM_CTX_MAX];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Per-kind context limits.
|
||||||
|
*/
|
||||||
|
tkm_limits_t limits;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rwlocks for context id lists
|
* rwlocks for context id lists
|
||||||
*/
|
*/
|
||||||
@@ -66,7 +71,8 @@ static bool is_valid_kind(const tkm_context_kind_t kind)
|
|||||||
METHOD(tkm_id_manager_t, acquire_id, int,
|
METHOD(tkm_id_manager_t, acquire_id, int,
|
||||||
private_tkm_id_manager_t * const this, const tkm_context_kind_t kind)
|
private_tkm_id_manager_t * const this, const tkm_context_kind_t kind)
|
||||||
{
|
{
|
||||||
int j, id = 0;
|
int id = 0;
|
||||||
|
uint64_t j;
|
||||||
|
|
||||||
if (!is_valid_kind(kind))
|
if (!is_valid_kind(kind))
|
||||||
{
|
{
|
||||||
@@ -76,7 +82,7 @@ METHOD(tkm_id_manager_t, acquire_id, int,
|
|||||||
}
|
}
|
||||||
|
|
||||||
this->locks[kind]->write_lock(this->locks[kind]);
|
this->locks[kind]->write_lock(this->locks[kind]);
|
||||||
for (j = 0; j < TKM_LIMIT; j++)
|
for (j = 0; j < this->limits[kind]; j++)
|
||||||
{
|
{
|
||||||
if (this->ctxids[kind][j])
|
if (this->ctxids[kind][j])
|
||||||
{
|
{
|
||||||
@@ -135,7 +141,8 @@ METHOD(tkm_id_manager_t, destroy, void,
|
|||||||
tkm_id_manager_t *tkm_id_manager_create(const tkm_limits_t limits)
|
tkm_id_manager_t *tkm_id_manager_create(const tkm_limits_t limits)
|
||||||
{
|
{
|
||||||
private_tkm_id_manager_t *this;
|
private_tkm_id_manager_t *this;
|
||||||
int i, j;
|
int i;
|
||||||
|
uint64_t j;
|
||||||
|
|
||||||
INIT(this,
|
INIT(this,
|
||||||
.public = {
|
.public = {
|
||||||
@@ -147,13 +154,16 @@ tkm_id_manager_t *tkm_id_manager_create(const tkm_limits_t limits)
|
|||||||
|
|
||||||
for (i = 0; i < TKM_CTX_MAX; i++)
|
for (i = 0; i < TKM_CTX_MAX; i++)
|
||||||
{
|
{
|
||||||
this->ctxids[i] = malloc(TKM_LIMIT * sizeof(bool));
|
this->limits[i] = limits[i];
|
||||||
|
this->ctxids[i] = malloc(limits[i] * sizeof(bool));
|
||||||
this->locks[i] = rwlock_create(RWLOCK_TYPE_DEFAULT);
|
this->locks[i] = rwlock_create(RWLOCK_TYPE_DEFAULT);
|
||||||
for (j = 0; j < TKM_LIMIT; j++)
|
for (j = 0; j < limits[i]; j++)
|
||||||
{
|
{
|
||||||
/* available id slots are in true state (is_available) */
|
/* available id slots are in true state (is_available) */
|
||||||
this->ctxids[i][j] = true;
|
this->ctxids[i][j] = true;
|
||||||
}
|
}
|
||||||
|
DBG2(DBG_LIB, "%N initialized, %llu slot(s)",
|
||||||
|
tkm_context_kind_names, i, limits[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return &this->public;
|
return &this->public;
|
||||||
|
|||||||
Reference in New Issue
Block a user