[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