From f3ee15a96b4a6ad6f2ff5ae4fc2ec1adfa038a3f Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Tue, 28 Jan 2003 17:56:15 +0000 Subject: [PATCH] fixed missing loop termination in db_cancel_event() when the event queue is completely full --- src/db/dbEvent.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/db/dbEvent.c b/src/db/dbEvent.c index 70f3c4cb2..2df83a6e3 100644 --- a/src/db/dbEvent.c +++ b/src/db/dbEvent.c @@ -444,13 +444,16 @@ int db_cancel_event(struct event_block *pevent) * would be possible. */ for ( getix = pevent->ev_que->getix; - pevent->ev_que->evque[getix] != EVENTQEMPTY; - getix = RNGINC ( getix ) ) { + pevent->ev_que->evque[getix] != EVENTQEMPTY; ) { if ( pevent->ev_que->evque[getix] == pevent ) { assert ( pevent->ev_que->nCanceled < USHRT_MAX ); pevent->ev_que->nCanceled++; event_remove ( pevent->ev_que, getix, &canceledEvent ); } + getix = RNGINC ( getix ); + if ( getix == pevent->ev_que->getix ) { + break; + } } assert ( pevent->npend == 0u );