diff options
| author | Doug Barton <dougb@FreeBSD.org> | 2010-03-02 19:49:55 +0000 |
|---|---|---|
| committer | Doug Barton <dougb@FreeBSD.org> | 2010-03-02 19:49:55 +0000 |
| commit | 841024d54f1f0a07feccf84d8938b00bc1f362b5 (patch) | |
| tree | c470abc978aa6ca4f6b0033d7e09c8b7b09cd629 /lib/isc/heap.c | |
| parent | 51917575cfd35d6a201b010726ea7404a0f9bb7e (diff) | |
Diffstat (limited to 'lib/isc/heap.c')
| -rw-r--r-- | lib/isc/heap.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/isc/heap.c b/lib/isc/heap.c index 91d78c06d468b..dc32100d2f185 100644 --- a/lib/isc/heap.c +++ b/lib/isc/heap.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Copyright (C) 2004-2007, 2010 Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 1997-2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: heap.c,v 1.37 2007/10/19 17:15:53 explorer Exp $ */ +/* $Id: heap.c,v 1.37.240.3 2010/02/04 23:47:46 tbox Exp $ */ /*! \file * Heap implementation of priority queues adapted from the following: @@ -186,15 +186,17 @@ sink_down(isc_heap_t *heap, unsigned int i, void *elt) { isc_result_t isc_heap_insert(isc_heap_t *heap, void *elt) { - unsigned int i; + unsigned int new_last; REQUIRE(VALID_HEAP(heap)); - i = ++heap->last; - if (heap->last >= heap->size && !resize(heap)) + new_last = heap->last + 1; + RUNTIME_CHECK(new_last > 0); /* overflow check */ + if (new_last >= heap->size && !resize(heap)) return (ISC_R_NOMEMORY); + heap->last = new_last; - float_up(heap, i, elt); + float_up(heap, new_last, elt); return (ISC_R_SUCCESS); } |
