git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] http-push: simplify deleting a list item

From
René Scharfe <l.s.r@web.de>
Date
Oct 13, 2019, 12:49 UTC
Message-ID
<3739b392-ee45-98c2-c5fa-e4c36e585166@web.de>

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
Next: Junio C Hamano
Message 1 of 2 in “http-push: simplify deleting a list item”
  1. http-push: simplify deleting a list itemRené Scharfe, Oct 13, 2019
  2. Junio C HamanoOct 15, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.