git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH] http-push: simplify deleting a list item
@ 2019-10-13 12:49 René Scharfe
  2019-10-15  1:53 ` Junio C Hamano
  0 siblings, 1 reply; 2+ messages in thread
From: René Scharfe @ 2019-10-13 12:49 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano

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@web.de>
---
 http-push.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

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

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] http-push: simplify deleting a list item
  2019-10-13 12:49 [PATCH] http-push: simplify deleting a list item René Scharfe
@ 2019-10-15  1:53 ` Junio C Hamano
  0 siblings, 0 replies; 2+ messages in thread
From: Junio C Hamano @ 2019-10-15  1:53 UTC (permalink / raw)
  To: René Scharfe; +Cc: Git Mailing List

René Scharfe <l.s.r@web.de> 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@web.de>
> ---
>  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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-10-15  1:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-13 12:49 [PATCH] http-push: simplify deleting a list item René Scharfe
2019-10-15  1:53 ` Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).