diff options
author | Claudio Jeker <claudio@cvs.openbsd.org> | 2010-03-26 16:00:10 +0000 |
---|---|---|
committer | Claudio Jeker <claudio@cvs.openbsd.org> | 2010-03-26 16:00:10 +0000 |
commit | 8a39ba3d43d7678c5f5a93a5a942d2a2b7bd32c6 (patch) | |
tree | cd95ba6c6912f95cd11df9fd295a740350d74307 | |
parent | 8efffd9e11c930b21529122c110490b4aedfe3f9 (diff) |
event_del() the read event when hitting a read error or when closing the
file descriptor. If not done, we will loop forever on this event.
OK michele@
-rw-r--r-- | usr.sbin/ldpd/packet.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/usr.sbin/ldpd/packet.c b/usr.sbin/ldpd/packet.c index 5b8b8bf260d..7e7e1d46149 100644 --- a/usr.sbin/ldpd/packet.c +++ b/usr.sbin/ldpd/packet.c @@ -1,4 +1,4 @@ -/* $OpenBSD: packet.c,v 1.4 2010/02/25 17:40:46 claudio Exp $ */ +/* $OpenBSD: packet.c,v 1.5 2010/03/26 16:00:09 claudio Exp $ */ /* * Copyright (c) 2009 Michele Marchetto <michele@openbsd.org> @@ -328,6 +328,7 @@ session_read(int fd, short event, void *arg) sizeof(nbr->rbuf->buf) - nbr->rbuf->wpos)) == -1) { if (errno != EINTR && errno != EAGAIN) { /* XXX find better error */ + event_del(&nbr->rev); session_shutdown(nbr, S_SHUTDOWN, 0, 0); return; } @@ -464,6 +465,7 @@ session_close(struct nbr *nbr) inet_ntoa(nbr->id)); evbuf_clear(&nbr->wbuf); + event_del(&nbr->rev); if (evtimer_pending(&nbr->keepalive_timer, NULL)) evtimer_del(&nbr->keepalive_timer); |