is there double free error for this?

void free_client(int fd, Client **clients) {
    if (*clients != NULL) {
        if ((*clients)->fd == fd) {
            Client *pass = *clients;
            *clients = (*clients)->next;
            free(pass->username);
            free(pass->buffer);
            free(pass);
        } else {
            Client *prev = *clients;
            Client *curr = (*clients)->next;
            while (curr != NULL && curr->fd != fd) {
                prev = curr;
                curr = curr->next;
            }
            if (curr != NULL) {
                prev->next = curr->next;
                free(curr->username);
                free(curr->buffer);
                free(curr);
            }
        }
    }
}