Skip to content

Commit bcd5a40

Browse files
pks-tgitster
authored andcommitted
reftable/error: introduce out-of-memory error code
The reftable library does not use the same memory allocation functions as the rest of the Git codebase. Instead, as the reftable library is supposed to be usable as a standalone library without Git, it provides a set of pluggable memory allocators. Compared to `xmalloc()` and friends these allocators are _not_ expected to die when an allocation fails. This design choice is concious, as a library should leave it to its caller to handle any kind of error. While it is very likely that the caller cannot really do much in the case of an out-of-memory situation anyway, we are not the ones to make that decision. Curiously though, we never handle allocation errors even though memory allocation functions are allowed to fail. And as we do not plug in Git's memory allocator via `reftable_set_alloc()` either the consequence is that we'd instead segfault as soon as we run out of memory. While the easy fix would be to wire up `xmalloc()` and friends, it would only fix the usage of the reftable library in Git itself. Other users like libgit2, which is about to revive its efforts to land a backend for reftables, wouldn't be able to benefit from this solution. Instead, we are about to do it the hard way: adapt all allocation sites to perform error checking. Introduce a new error code for out-of-memory errors that we will wire up in subsequent steps. This commit also serves as the motivator for all the remaining steps in this series such that we do not have to repeat the same arguments in every single subsequent commit. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent e8a0c24 commit bcd5a40

File tree

2 files changed

+5
-0
lines changed

2 files changed

+5
-0
lines changed

reftable/error.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ const char *reftable_error_str(int err)
3535
return "entry too large";
3636
case REFTABLE_OUTDATED_ERROR:
3737
return "data concurrently modified";
38+
case REFTABLE_OUT_OF_MEMORY_ERROR:
39+
return "out of memory";
3840
case -1:
3941
return "general error";
4042
default:

reftable/reftable-error.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ enum reftable_error {
5757

5858
/* Trying to write out-of-date data. */
5959
REFTABLE_OUTDATED_ERROR = -12,
60+
61+
/* An allocation has failed due to an out-of-memory situation. */
62+
REFTABLE_OUT_OF_MEMORY_ERROR = -13,
6063
};
6164

6265
/* convert the numeric error code to a string. The string should not be

0 commit comments

Comments
 (0)