int delete_reservation(int sd) {
    char client_key[30];
    if (read(sd,client_key,11) == -1 ) {
        perror("client_key read error");
    }
    if(alarm_flag = 1 ) {
        return;
    }
    if (perform_delete(client_key) == 0) {
        write(sd,"WRONG_KEY",20);
        return 0;
    } else {
        save_reservation_array(info.rows*info.clmn,info.key_length);
        write(sd,"DEL_CONFIRMED",20);
        return 1;
    }
}
void reservation(int sd) {
    int res;
    unsigned int seats_num = 0;

    //receive seats number
    res = read(sd,&seats_num,sizeof(seats_num));
    if(res < sizeof(seats_num)) {
        if(res == -1 ) {
            perror("receive number of seats");
        }
        else {
            puts("Error: received invalid seats num");
        }
        return;
    }
    if(alarm_flag == 1 ) {
        return;
    }

    //receive seats
    struct seat seats_temp[seats_num];
    res = read(sd,seats_temp,sizeof(seats_temp));
    if(res < sizeof(seats_temp)) {
        if(res == -1) {
            perror("receive seats");
        }
        else {
            puts("Error: mismatch of seats number recived");
        }
        return;
    }
    if(alarm_flag == 1 ) {
        return;
    }

    if (seats_available(seats_num,seats_temp) == 0 ||
            (check_constrains(seats_num,seats_temp) == -1) ||
            (no_double_seats(seats_temp,seats_num) == -1 ) ) {
        char msg[10] = "RES_ERR";
        res = send(sd,msg,11,0);
        if (res < 11 ) {
            perror("send error error");
            return;
        }
    }
    else {
        unsigned int last_res_index;
        struct reservation * r_entry;
        last_res_index = perform_reservation(seats_num,seats_temp,&r_entry);
        if ((save_reservation_array(info.rows*info.clmn,info.key_length)) == -1 ) {
            perform_delete(r_entry->reservation_code);
            return;
        }
        res = send(sd,r_entry->reservation_code,info.key_length+1,0);
        if (res < info.key_length+1) {
            puts("error sending reservation code");
            perform_delete(r_entry->reservation_code);
        }
    }
    return;
}
/**
 * Deallocate resources associated with @a ptr.
 *
 * @param ptr A buffer previously allocated with async-safe new.
 * @param size The size of the allocated buffer.
 */
void AsyncAllocatable::operator delete (void *ptr, size_t size) {
    return perform_delete(ptr, size);
}