int32_t mem_put_idle_item(mem_item_t *pitem) { SYS_PARA_CHECK(pitem && pitem->pidle); //放回idle链表尾部。 pthread_mutex_lock(&pitem->pidle->mutex); //减少连接引用计数。 if(pitem->plinkRcv){ pthread_mutex_lock(&pitem->plinkRcv->mutex); // if(pitem->plinkRcv->itemCnt > 0) pitem->plinkRcv->itemCnt--; if(pitem->plinkRcv->itemCnt < 0) DBG_PRINTF("plink:%p itemCnt:%d\n",pitem->plinkRcv, pitem->plinkRcv->itemCnt); pthread_mutex_unlock(&pitem->plinkRcv->mutex); pitem->plinkRcv = NULL; } /*重置内存块*/ memory_reset(&pitem->mem); list_add_tail(&pitem->user, &pitem->pidle->list); pthread_mutex_unlock(&pitem->pidle->mutex); __sync_fetch_and_sub(&mpool.useCnt,1); /*唤醒有空闲可用的mem item */ sem_post(&pitem->pidle->sem); return SYS_ERR_NONE; }
时间: 2024-04-27 14:21:56 浏览: 124
这是一个函数的代码实现,看起来像是C语言。函数的名称是`mem_put_idle_item`,它接受一个类型为`mem_item_t`的指针参数`pitem`,返回一个`int32_t`类型的值。
在函数开头,它会使用宏定义`SYS_PARA_CHECK`来检查`pitem`和`pitem->pidle`是否为空。如果为空,会返回一个错误码。
接下来,它会锁住`pitem->pidle`的互斥锁。然后它会检查`pitem->plinkRcv`是否存在,如果存在,会将它的`itemCnt`减1。如果`itemCnt`小于0,则会输出一条调试信息。然后会解锁`pitem->plinkRcv`的互斥锁,并将`pitem->plinkRcv`设为NULL。
接着,它会使用`memory_reset`函数重置`pitem->mem`所指向的内存块。然后会将`pitem->user`所指向的节点插入到`pitem->pidle->list`链表的末尾。最后,会解锁`pitem->pidle`的互斥锁,并使用`sem_post`函数唤醒等待`pitem->pidle->sem`信号量的线程。
最后,函数会将全局变量`mpool.useCnt`的值减1,并返回一个没有错误的错误码。
阅读全文