/** * Close the node and free memory. * * @param node */ void aura_close(struct aura_node *node) { struct aura_eventloop *loop = aura_eventloop_get_data(node); if (node->tr->close) node->tr->close(node); if (loop) { if (loop->autocreated) aura_eventloop_destroy(loop); else aura_eventloop_del(node); } /* After transport shutdown we need to clean up remaining buffers */ cleanup_buffer_queue(&node->inbound_buffers); cleanup_buffer_queue(&node->outbound_buffers); aura_transport_release(node->tr); /* Check if we have an export table registered and nuke it */ if (node->tbl) aura_etable_destroy(node->tbl); /* Free file descriptors */ if (node->fds) free(node->fds); free(node); slog(6, SLOG_LIVE, "Transport closed"); }
static int l_eventloop_destroy(lua_State *L) { struct laura_eventloop *lloop; TRACE(); aura_check_args(L, 1); if (!lua_isuserdata(L, 1)) aura_typeerror(L, 2, "ludata (eventloop)"); lloop = lua_touserdata(L, 1); if (!lloop) return luaL_error(L, "Failed to retrive arguments"); if (!lloop->loop) return 0; aura_eventloop_destroy(lloop->loop); lloop->loop = NULL; return 0; }