inline static void update_xmalloc_stat_free(uint32_t handle, size_t __n) { ATOM_SUB(&_used_memory, __n); ATOM_DEC(&_memory_block); ssize_t* allocated = get_allocated_field(handle); if(allocated) { ATOM_SUB(allocated, __n); } }
static void stm_releasecopy(struct stm_copy *copy) { if (copy == NULL) return; if (ATOM_DEC(©->reference) == 0) { skynet_free(copy->msg); skynet_free(copy); } }
static void stm_releasereader(struct stm_object *obj) { rwlock_rlock(&obj->lock); if (ATOM_DEC(&obj->reference) == 0) { // last reader, no writer. so no need to unlock assert(obj->copy == NULL); skynet_free(obj); return; } rwlock_runlock(&obj->lock); }
/* lightuserdata struct mc_package * */ static int mc_closelocal(lua_State *L) { struct mc_package *pack = lua_touserdata(L,1); int ref = ATOM_DEC(&pack->reference); if (ref <= 0) { skynet_free(pack->data); skynet_free(pack); if (ref < 0) { return luaL_error(L, "Invalid multicast package reference %d", ref); } } return 0; }