Re: hang in gconfd
- From: Owen Taylor <otaylor redhat com>
- To: Michael Meeks <michael ximian com>
- Cc: Havoc Pennington <hp redhat com>, <orbit-list gnome org>, <gconf-list gnome org>, gnome-2-0 <gnome-2-0-list gnome org>
- Subject: Re: hang in gconfd
- Date: 11 Dec 2001 16:16:35 -0500
Michael Meeks <michael ximian com> writes:
> Hi Havoc,
>
> On 10 Dec 2001, Havoc Pennington wrote:
> > So, Owen discovered today that right now EAGAIN results in some
> > infinite-loop action - so this issue results in 100% CPU with ORBit2,
> > instead of blocking as in ORBit1.
>
> I fixed that bug a few days back - essentialy not checking the
> connection status having done a linc mainloop iteration. Should work with
> a HEAD linc. Otherwise - yes, it blocks on write - but we knew that anyway
> :-)
100% CPU still hangs with linc as of this morning -- to quote
linc-connection.c:linc_connection_writev():
while (size_left > 0) {
int n;
n = writev (fd, vptr, MIN (vecs_left, WRITEV_IOVEC_LIMIT));
if (n < 0) {
if (errno == EINTR)
continue;
else if (errno == EAGAIN &&
(cnx->options & LINC_CONNECTION_NONBLOCKING))
linc_main_iteration (FALSE);
[...]
}
[...]
if (cnx->status != LINC_CONNECTED)
return -1;
}
So, as long as it can't write (EAGAIN) it runs one iteration of linc_main_iteration(),
not and tries again. Eating up a great deal of my CPU unless something changes
cnx->status. But I don't see any particular reason the state would change when
trying to write to an unresponsive client.
Regards,
Owen
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]