scheduling using real slots number

This commit is contained in:
Rongsong Shen 2025-12-30 18:13:15 +08:00
parent 8db4458375
commit 780e9fb313
22 changed files with 980 additions and 105 deletions

View file

@ -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);