void tapdisk_nbdserver_free_client(td_nbdserver_client_t *client) { INFO("Free client"); ASSERT(client); if (client->client_event_id >= 0) tapdisk_nbdserver_disable_client(client); if (likely(!tapdisk_nbdserver_reqs_pending(client))) { list_del(&client->clientlist); tapdisk_nbdserver_reqs_free(client); free(client); } else client->dead = true; }
static void tapdisk_nbdserver_free_client(td_nbdserver_client_t *client) { INFO("Free client"); if (!client) { ERROR("Attempt to free NULL pointer!"); return; } if (client->client_event_id >= 0) tapdisk_nbdserver_disable_client(client); list_del(&client->clientlist); tapdisk_nbdserver_reqs_free(client); free(client); }
int tapdisk_nbdserver_reqs_init(td_nbdserver_client_t *client, int n_reqs) { int i, err; ASSERT(client); ASSERT(n_reqs > 0); INFO("Reqs init"); client->reqs = malloc(n_reqs * sizeof(td_nbdserver_req_t)); if (!client->reqs) { err = -errno; goto fail; } client->iovecs = malloc(n_reqs * sizeof(struct td_iovec)); if (!client->iovecs) { err = - errno; goto fail; } client->reqs_free = malloc(n_reqs * sizeof(td_nbdserver_req_t*)); if (!client->reqs_free) { err = -errno; goto fail; } client->n_reqs = n_reqs; client->n_reqs_free = 0; for (i = 0; i < n_reqs; i++) { client->reqs[i].vreq.iov = &client->iovecs[i]; tapdisk_nbdserver_set_free_request(client, &client->reqs[i]); } return 0; fail: tapdisk_nbdserver_reqs_free(client); return err; }