belle_sip_object_t * _belle_sip_object_new(size_t objsize, belle_sip_object_vptr_t *vptr){ belle_sip_object_t *obj=(belle_sip_object_t *)belle_sip_malloc0(objsize); obj->ref=vptr->initially_unowned ? 0 : 1; obj->vptr=vptr; obj->size=objsize; if (obj->ref==0){ belle_sip_object_pool_t *pool=belle_sip_object_pool_get_current(); if (pool) belle_sip_object_pool_add(pool,obj); } return obj; }
belle_sip_object_t *belle_sip_object_clone(const belle_sip_object_t *obj){ belle_sip_object_t *newobj; newobj=belle_sip_malloc0(obj->vptr->size); newobj->ref=obj->vptr->initially_unowned ? 0 : 1; newobj->vptr=obj->vptr; _belle_sip_object_copy(newobj,obj); if (newobj->ref==0){ belle_sip_object_pool_t *pool=belle_sip_object_pool_get_current(); if (pool) belle_sip_object_pool_add(pool,newobj); } add_new_object(newobj); return newobj; }