[so] [Tema2][Windows] vmchecker says popen read too many syscalls

Gabriel Boroghina gabiboro97 at gmail.com
Mon Apr 1 19:36:05 EEST 2019


Salut,

Am si eu problema asta. Din ce am observat, e o problema de
sincronizare intre procesul parinte
(care citeste din pipe) si procesul copil (care scrie in pipe).

Ideea e ca pipe-ul creat cu CreatePipe are un buffer asociat de
dimensiune egala cu valoarea
data ca ultim parametru (nSize); si daca bufferul asta nu e suficient
de mare, procesul copil nu
o sa reuseasca sa scrie suficient (4096 bytes in principiu, incat sa
poti sa iti umpli tu bufferul din
SO_FILE cand citesti) pana incepe procesul parinte sa citeasca.

O varianta simpla de rezolvare ar fi sa ii dai o dimensiune mare
buffer-ului pipe-ului; in felul asta,
in cele 2 secunde de Sleep din tester (linia 82, unde e si comentariul
// make sure the child process wrote
all the data) child-ul va apuca sa scrie tot in buffer, iar parent-ul
va citi cat de mult posibil (4096 la primele
3 citiri, restul la a 4-a si va primi EOF la a 5-a).

Dar as vrea si eu sa stiu daca varianta asta e acceptabila (ca
presupune sa setam nSize ala
cu un "magic constant" oarecum).
Btw, daca ii dai o dimensiune mica lui nSize (de ex. 300), o sa iti
pice si pe local (sau daca ii dai 2-3
core-uri VM-ului :)) ). Daca dai nSize = 0, din ce am citit, se
foloseste o dimensiune standard (care nu e
prestabilita, depinde de RAM-ul disponibil, etc).

Gabriel Boroghina

On Sun, 31 Mar 2019 at 20:44, George Diaconu via so
<so at cursuri.cs.pub.ro> wrote:
>
> Salut,
>
> Vin cu o problema veche de cand lumea, local trec toate testele fara
> probleme, pe vmchecker, testul popen read da fail cu mesajul
> "src/test_popen_read.c:96: Incorrect number of reads: got 220,
> expected 5".
> O singura data a trecut testul acesta pe vmchecker, si atunci nu am
> modificat nimic intre upload-uri. Acum am mai facut cateva modificari,
> local merge, dar pe vmchecker nu vrea...
> Nici nu stiu cum sa fac debugging in clipa asta...
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so/info/lista-discutii


More information about the so mailing list