void IOBuf_destroy(IOBuf *buf) { if(buf) { IOBuf_close(buf); // ignore return if(buf->use_ssl) { ssl_free(&buf->ssl); } if(buf->buf) free(buf->buf); free(buf); } }
int Register_disconnect(int fd) { check(fd < MAX_REGISTERED_FDS, "FD given to register is greater than max."); check(fd >= 0, "Invalid FD given for disconnect."); Registration *reg = darray_get(REGISTRATIONS, fd); check_debug(Register_valid(reg), "Attempt to unregister FD %d which is already gone.", fd); check(reg->fd == fd, "Asked to disconnect fd %d but register had %d", fd, reg->fd); if(IOBuf_close(reg->data->iob) != 0) { debug("Failed to close IOBuffer, probably SSL error."); } Register_clear(reg); // tracking the number of things we're processing NUM_REG_FD--; return 0; error: fdclose(fd); return -1; }