T1: -1 pkt
Test podstawowy: serwer 2 4
, klient 1 1 1
, klient 1 2 2
.
T2: -1 pkt
Czterej klienci zgłaszają się jednocześnie. Zasobów wystarczy dla jednej pary naraz.
T3: -1 pkt
Gdy jedna para klientów pracuje, zgłasza się kolejna para prosząc o zasoby innego rodzaju.
T4: -1 pkt
Gdy jedna para klientów pracuje, zgłasza się kolejna para prosząc o zasoby tego samego rodzaju. Zasobów wystarczy dla obu par.
T5: -1 pkt
Złośliwy przeplot, w którym para prosząca o więcej zasobów mogłaby zostać zagłodzona.
T6: -1 pkt
Wielu klientów zgłasza się naraz, prosząc o różną liczbę zasobów. Zasobów wystarczy dla kilku par jednocześnie.
T7: -1 pkt
Wiele par klientów zgłasza się do serwera. Kolejna para gdy poprzednia zakończyła pracę.
T8: -1 pkt
Dynamiczne tworzenie i kończenie wątków serwera, gdy zgłasza się różna liczba par klientów.
T9: -1 pkt
Wycieki pamięci. Sprawdzane przy pomocy valgrind
.
T10: -1 pkt
Aktywne czekanie serwera na klientów. Sprawdzane przy pomocy strace
.
T11: -1 pkt
Jednocześnie zgłasza się wiele par klientów, w których jeden pracuje krótko, a drugi długo. Zasobów wystarczy dla wszystkich.
T12: -1 pkt
Do serwera zgłasza się tylko jeden klient, po czym wysyłany jest sygnał SIGINT
.
T13: -1 pkt
Gdy jedna para klientów pracuje, wysyłany jest sygnał SIGINT
. Następnie, do serwera zgłasza się kolejna para.
T14: -1 pkt
Usuwanie łącz po zakończeniu pracy.
O1: -0,5 pkt
Rozwiązanie nie rozpakowuje się do wymaganego katalogu.
O2: -0,5 pkt
Paczka nie jest w formacie tar.gz
.
O3: -0,1 pkt
Paczka zawiera niepotrzebne pliki ("śmieci").
Kara nie była naliczana za zbędne pliki związane z biblioteką do raportów.
O4: -0,5 pkt
Problemy z kompilacją rozwiązania dotyczące biblioteki do raportów.
Rozwiązanie nie budowało się poprawnie z właściwą biblioteką do raportów, po wykonaniu poleceń, jakie podano w treści zadania.
O5: -0,5 pkt
Niepoprawna nazwa pliku (plików) wykonywalnego po zbudowaniu rozwiązania.
O6: -0,5 pkt
Pliki nagłówkowy zawiera implementacje funkcji.
O7: -0,5 pkt
Te same struktury są zdefiniowane dwukrotnie (zapewne kopiuj–wklej) zarówno w kodzie serwera, jak i klienta, zamiast raz w jednym pliku nagłówkowym.
O8: -0,5 pkt
Plik nagłówkowy nie zawiera #ifndef HEADER_H ...
(lub innego, równoważnego rozwiązania), które zapobiegłoby ew. wielokrotnemu wstawieniu tego samego nagłówka w jednej jednostce kompilacji.
O9, O10, O11, O12: po -0,3 pkt
Implementacja nie sprawdza, czy wywołanie pthread_create()
(O9), mkfifo()
(O10) lub open()
(O11) zakończyło się sukcesem (nie zwróciło błędu).
Sprawdzałem tworzenie wątków obsługujących klientów oraz tworzenie i otwieranie głównego łącza serwera.
Jeśli sukces/błąd któregoś, z wyżej wymienionych wywołań, jest sprawdzany, weryfikowałem, czy w przypadku błędu usuwane jest główne łącze serwera (O12).
O13: -0,5 pkt
Implementacja nie zamyka deskryptora głównego łącza serwera, gdy serwer kończy pracę.
O14: -1 pkt
Implementacja korzysta do synchronizacji lub komunikacji między wątkami lub procesami niedozwolonych w tym zadaniu mechanizmów (np. nazwanych semaforów).
O15: -0,5 pkt
Dane są przekazywane do nowego wątku (czwarty argument phtread_create()
) w niewłaściwy sposób: np. mogą zostać zmienione zanim nowo powstały wątek je odczyta.
O16: -0,5 pkt Nazwa pliku będącego głównym łączem serwera nie jest parametrem/stałą, tylko jest wpisana w kodzie w każdym miejscu, gdzie jest potrzebna.
O17: -1 pkt
Inne.
Np., jeśli rozwiązanie jest oddawane wraz z repozytorium git (specjalnie lub przypadkiem), to proszę nie używać w nazwach commitów słów, które są w słownikach oznaczane jako wulg.
Autorzy takich rozwiązań zostali poinformowani o przyczynie indywidualnie.
P0: -1 pkt
Rozwiązanie wymagało poprawki autora, żeby zaliczyć test podstawowy.
P1: -0,5 pkt
Drobna poprawka pojedynczego problemu.
P2: -1 pkt
Większa poprawka pojedynczego problemu.