*off topic * RE: Pidgin Zombie Process

Ethan Blanton elb at pidgin.im
Tue Aug 1 13:50:29 EDT 2017


David Balažic wrote:
> Ethan Blanton wrote:
> > If you *just* restarted or reconnected, this can happen.  They should be reaped shortly.  (They're due to the DNS subsystem.)
> 
> Wow, after 20 years this is still an issue on unix?
> I remember experiencing it first with early versions of Netscape in
> the nineties.
> 
> this=application freezes for few seconds due to DNS things

Sort of.  The "standard" DNS APIs in C are synchronous.  This is
because neither ISO C nor POSIX really provides a good mechanism for
general asynchronous APIs.  (There are a variety of mechanisms to
provide asynchrony, but not trivially wrapped in a generic API without
some sort of runtime.) This means that every DNS lookup using those
APIs must wait until the DNS subsystem responds with either an IP
address (or domain name, for reverse lookups) or an error, which can
take many seconds.  There are, however, a wide variety of asynchonous
DNS resolver APIs provided by various runtime packages (including
glib, which we use).  The libpurple implementation of asynchronous DNS
using fork() predates the availability of a good, generally available
implementation that did not require the addition of a large and
complex runtime dependency.

Now that glib (really, GIO) provides a good asynchronous DNS API that
is both generally available on the platforms libpurple supports and
not an additional large dependency, we will be dropping our internal
implementation in 3.0.  This could have happened some years ago,
except for our policies regarding backwards compatability and API
changes.  The version bump for 3.0 frees us from those constraints.

Ethan



More information about the Support mailing list