fis-gtm/sr_unix_gnp/cmi_alloc.c

72 lines
1.5 KiB
C

/****************************************************************
* *
* Copyright 2001, 2009 Fidelity Information Services, Inc *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
#include "mdef.h"
#include "cmidef.h"
#include "relqop.h"
#include "eintr_wrappers.h"
GBLREF struct NTD *ntd_root;
void cmi_free_clb(struct CLB *lnk)
{
sigset_t oset;
struct NTD *tsk;
int rc;
if (!lnk)
return;
tsk = lnk->ntd;
insqt(&lnk->cqe, &tsk->cqh_free);
ntd_root->freelist_dirty = TRUE;
ntd_root->free_count++;
SIGPROCMASK(SIG_BLOCK, &tsk->mutex_set, &oset, rc);
cmj_housekeeping();
SIGPROCMASK(SIG_SETMASK, &oset, NULL, rc);
}
struct CLB *cmi_alloc_clb(void)
{
struct CLB *lnk;
que_ent_ptr_t qp;
if (ntd_root && ntd_root->pool_size)
{
/* server path */
qp = remqh(&ntd_root->cqh_free);
if (qp)
{
lnk = QUEENT2CLB(qp, cqe);
ntd_root->free_count--;
}
}
else
{
/* client path */
lnk = (struct CLB *)malloc(SIZEOF(*lnk));
cmj_init_clb(NULL, lnk);
}
return lnk;
}
unsigned char *cmi_realloc_mbf(struct CLB *lnk, size_t new_size)
{
if (lnk->mbf)
{
lnk->mbl = 0;
free(lnk->mbf);
}
lnk->mbf = (unsigned char *)malloc(new_size);
if (lnk->mbf)
lnk->mbl = new_size;
return lnk->mbf;
}