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

[JGIT PATCH 01/10] Safely handle closing an already closed WindowedFile

From
Shawn O. Pearce <spearce@spearce.org>
Date
Apr 21, 2009, 01:21 UTC
Message-ID
<1240276872-17893-2-git-send-email-spearce@spearce.org>
In-Reply-To
<1240276872-17893-1-git-send-email-spearce@spearce.org>

If cacheOpen throws an exception (e.g. FileNotFoundException) we may wind up in cacheClose, where the fd is null because we didn't successfully construct the RandomAccessFile. In such cases there is nothing to attempt to close.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 .../src/org/spearce/jgit/lib/WindowedFile.java     |   16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/WindowedFile.java b/org.spearce.jgit/src/org/spearce/jgit/lib/WindowedFile.java
index 938f44c..9293eb9 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/WindowedFile.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/WindowedFile.java
@@ -297,14 +297,16 @@ void cacheOpen() throws IOException {
 	}
 
 	void cacheClose() {
-		try {
-			fd.close();
-		} catch (IOException err) {
-			// Ignore a close event. We had it open only for reading.
-			// There should not be errors related to network buffers
-			// not flushed, etc.
+		if (fd != null) {
+			try {
+				fd.close();
+			} catch (IOException err) {
+				// Ignore a close event. We had it open only for reading.
+				// There should not be errors related to network buffers
+				// not flushed, etc.
+			}
+			fd = null;
 		}
-		fd = null;
 	}
 
 	void allocWindow(final WindowCursor curs, final int windowId,
-- 
1.6.3.rc1.188.ga02b
Previous: Shawn O. PearceNext: Shawn O. Pearce
Message 2 of 17 in “Object access improvements”
  1. 00/10 Object access improvementsShawn O. Pearce, Apr 21, 2009
  2. 01/10 Safely handle closing an already closed WindowedFileShawn O. Pearce, Apr 21, 2009
  3. 02/10 Change empty tree test case to use a temporary repositoryShawn O. Pearce, Apr 21, 2009
  4. 03/10 Replace hand-coded read fully loop with NB.readFullyShawn O. Pearce, Apr 21, 2009
  5. 04/10 Clear the reverse index when closing a PackFileShawn O. Pearce, Apr 21, 2009
  6. 05/10 Introduce a new exception type for an in-place pack modificationShawn O. Pearce, Apr 21, 2009
  7. 06/10 Refactor object database access with new abstractionShawn O. Pearce, Apr 21, 2009
  8. 07/10 Rescan packs if a pack is modified in-place (part 1)Shawn O. Pearce, Apr 21, 2009
  9. 08/10 Scan for new packs if GIT_DIR/objects/pack has been modifiedShawn O. Pearce, Apr 21, 2009
  10. 09/10 Add test cases for loading new (or replaced) pack filesShawn O. Pearce, Apr 21, 2009
  11. 10/10 BROKEN TEST: ObjectLoader stays valid across repacksShawn O. Pearce, Apr 21, 2009
  12. Robin RosenbergApr 21, 2009
  13. Shawn O. PearceApr 22, 2009
  14. Shawn O. PearceApr 22, 2009
  15. 09/10 Add test cases for loading new (or replaced) pack filesShawn O. Pearce, Apr 21, 2009
  16. Shawn O. PearceApr 21, 2009
  17. 08/10 Scan for new packs if GIT_DIR/objects/pack has been modifiedShawn O. Pearce, Apr 21, 2009

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.