René Scharfe <l.s.r@xxxxxx> writes: > The first step for deleting an item from a linked list is to locate the > item preceding it. Be more careful in release_request() and handle an > empty list. This only has consequences for invalid delete requests > (removing the same item twice, or deleting an item that was never added > to the list), but simplifies the loop condition as well as the check > after the loop. > > Once we found the item's predecessor in the list, update its next > pointer to skip over the item, which removes it from the list. In other > words: Make the item's successor the successor of its predecessor. > (At this point entry->next == request and prev->next == lock, > respectively.) This is a bit simpler and saves a pointer dereference. > > Signed-off-by: René Scharfe <l.s.r@xxxxxx> > --- > http-push.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) Nice simplification. I wonder how much longer we should be maintaining this program, though;-) Will queue. > > diff --git a/http-push.c b/http-push.c > index 0353f9f514..822f326599 100644 > --- a/http-push.c > +++ b/http-push.c > @@ -501,10 +501,10 @@ static void release_request(struct transfer_request *request) > if (request == request_queue_head) { > request_queue_head = request->next; > } else { > - while (entry->next != NULL && entry->next != request) > + while (entry && entry->next != request) > entry = entry->next; > - if (entry->next == request) > - entry->next = entry->next->next; > + if (entry) > + entry->next = request->next; > } > > free(request->url); > @@ -981,7 +981,7 @@ static int unlock_remote(struct remote_lock *lock) > while (prev && prev->next != lock) > prev = prev->next; > if (prev) > - prev->next = prev->next->next; > + prev->next = lock->next; > } > > free(lock->owner); > -- > 2.23.0