[libgadu-devel] RFC: Wybór resolvera

Wojtek Kaniewski wojtekka at toxygen.net
Sun Dec 7 12:46:44 CET 2008


Wojtek Kaniewski pisze:
> (...)

Zmiany commitnięte. Od tej pory domyślnie będą kompilowane oba
resolvery, domyślny będzie fork. Jeśli wybrano --with-pthread, domyślny
będzie pthread, a przy --without-pthread pthread w ogóle nie będzie
dostępny. Dzięki temu zachowanie biblioteki względem starych wersji się
nie zmieni.

Aplikacja może użyć gg_login_params.resolver z parametrami:
- GG_RESOLVER_DEFAULT (wartość 0, więc domyślnie jest domyślnie ;)),
- GG_RESOLVER_FORK,
- GG_RESOLVER_PTHREAD.

W przyszłym API będą do użycie funkcje:
- gg_session_set_resolver(),
- gg_session_get_resolver(),
- gg_session_set_custom_resolver().
Teoretycznie już są, ale gg_login() od razu woła resolvera, więc nie ma
szans na zmianę. Wydaje mi się, że tak czy inaczej trzeba będzie
rozszerzyć API własnego resolvera o nasłuchiwanie deskryptorów i
timeouty, bo inaczej ręczne odpytywanie serwera DNS będzie dość trudne.

Napisałem też kawałek kodu, który testuje, czy któryś z resolverów nie
pisze po pamięci albo nie powoduje innych problemów. Przy okazji wyszło,
że dotychczasowy resolver pthread powodował wycieki pamięci, jeśli
połączenie zostało zerwane przed zakończeniem gethostbyname().
Poprawiłem, ale było by miło, gdyby ktoś mający pojęcie o wątkach
zerknął do funkcji gg_gethostbyname() i sprawdził, czy czegoś nie
pomieszałem -- dodałem blokowanie ubijania wątku na czas alokacji,
realokacji i dealokacji pamięci, dodałem też funkcję cleanup.

Jak zwykle, komentarze, uwagi itp. mile widziane :)

w.



More information about the libgadu-devel mailing list