[so] [Tema5] Bug exasperant

Costin Lupu costin.lup at gmail.com
Sat May 13 15:03:50 EEST 2017


On Sat, 2017-05-13 at 13:52 +0300, Ioana Ciornei via so wrote:
> Redirectez mesajul către lista de so.
> 
> 
> 
> On May 13, 2017 12:11, "Andrei Mardale" <andrei.mardale at gmail.com>
> wrote:
>         Salut,
>         
>         
>         Am inceput sa lucrez tema 5, AWS. Aproape am terminat, insa
>         imi pica ultimele 4 teste uneori (de la 31 .. 35). Testul 31
>         pica constant.. Am facut debugging si am observat ca nu se
>         incepe transferul al doilea. Asta pentru ca, desi folosesc
>         connection_remove(conn); si rc = w_epoll_remove_ptr(epollfd,
>         conn->efd, conn); dupa ce termin de transferat pentru primul
>         client, cumva, conexiunea nu este eliminata... astfel ca la
>         urmatoarea notificare de la epoll, tot pentru acea conexiune
>         sunt datele.. astfel ca programul se blocheaza in functia
>         wait_aio(conn); ...

Următorul event de input este cel pentru network (data available for
receive). Însă îl tratezi eronat ca fiind event de input pentru citirile
de pe disk. ATENȚIE: un file descriptor invalid are o valoare mai mică
decât 0 (0 e valoare validă, vezi STDIN_FILENO). Inițializează-ți
*toate* câmpurile structurii când creezi o conexiune nouă.

>         Chiar nu imi dau seama de ce se intampla asta... de asemenea,
>         voiam sa intreb daca acel eventfd pentru fiecare conexiune, ar
>         trebui adaugat cu w_epoll_add_fd sau w_epoll_add_ptr_in si sa
>         fie legat la conexiunea curenta?

Semantica e aceeași pentru ambele apeluri. Doar în cazul lui
'w_epoll_add_ptr_in' mai adaugi niște informație în plus pentru a
identifica ulterior mai punctual evenimentul primit. Asta înseamnă că e
de folosit când același file descriptor este asociat cu mai multe
entități (a se citi conexiuni în cazul temei 5).

Costin




More information about the so mailing list