scheduling using real slots number
This commit is contained in:
parent
8db4458375
commit
780e9fb313
22 changed files with 980 additions and 105 deletions
|
|
@ -53,7 +53,7 @@ static void* kvmgr_lock_(kvmgr_t* mgr, void* key, int op)
|
|||
if (op == OBJREF_NOP) {
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
return obj_ref(ptr, op);
|
||||
}
|
||||
|
||||
|
|
@ -108,7 +108,7 @@ void* kvmgr_lock_byid(kvmgr_t* mgr, int idx, int op)
|
|||
if (op == OBJREF_NOP) {
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
return obj_ref(ptr, op);
|
||||
}
|
||||
|
||||
|
|
@ -152,6 +152,47 @@ int32_t kvmgr_add(kvmgr_t* mgr, void* key, void* p)
|
|||
return idx;
|
||||
}
|
||||
|
||||
static int32_t kvmgr_put_(kvmgr_t* mgr, void* key, int idx, void* p)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
int idx1 = -1;
|
||||
|
||||
e = ht_get(&(mgr->htab), key);
|
||||
if (e != NULL) {
|
||||
idx1 = e->data;
|
||||
if (idx1 >= 0) {
|
||||
zarray_del(&(mgr->data), idx1);
|
||||
}
|
||||
} else {
|
||||
e = ht_add(&(mgr->htab), (void*)key);
|
||||
if (e == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
|
||||
if (idx1 != idx) {
|
||||
zarray_del(&(mgr->data), idx);
|
||||
}
|
||||
|
||||
e->data = idx;
|
||||
return zarray_put(&(mgr->data), idx, p);
|
||||
}
|
||||
|
||||
int32_t kvmgr_put(kvmgr_t* mgr, void* key, int idx, void* p)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if ((mgr == NULL) || (key == NULL) || (p == NULL) || (idx < 0)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
rc = kvmgr_put_(mgr, key, idx, p);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void kvmgr_del_(kvmgr_t* mgr, void* key)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
|
|
@ -245,6 +286,15 @@ xce_resource_t* resmgr_lockres(resmgr_t* mgr, char* resname, int op)
|
|||
return r;
|
||||
}
|
||||
|
||||
xce_resource_t* resmgr_lock_byid(resmgr_t* mgr, int idx, int op)
|
||||
{
|
||||
xce_resource_t* r = NULL;
|
||||
|
||||
r = (xce_resource_t*)kvmgr_lock_byid(&(mgr->resdef), idx, op);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
void resmgr_del_res(resmgr_t* mgr, xce_resource_t* r)
|
||||
{
|
||||
kvmgr_del(&(mgr->resdef), (void*)r->name);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue