From 30a017660498358d4b21967b33164b1077082dc3 Mon Sep 17 00:00:00 2001 From: Avril Date: Thu, 10 Jun 2021 20:45:13 +0100 Subject: [PATCH] added COW_ERR_POISON --- include/cow.h | 2 ++ src/cow.c | 2 ++ src/error.cpp | 1 + 3 files changed, 5 insertions(+) diff --git a/include/cow.h b/include/cow.h index 7a3a6a4..f522720 100644 --- a/include/cow.h +++ b/include/cow.h @@ -18,6 +18,8 @@ enum cow_err_kind { COW_ERR_SIZE, /// `mmap()` failed. COW_ERR_MAP, + /// Trying to use a poisoned cow + COW_ERR_POISONED, _COW_ERR_SIZE, }; diff --git a/src/cow.c b/src/cow.c index 6b9367f..2e8d355 100644 --- a/src/cow.c +++ b/src/cow.c @@ -122,7 +122,9 @@ void cow_free(cow_t* restrict cow) cow_t* cow_clone(const cow_t* cow) { if(UNLIKELY(cow->poisoned)) { + _cow_set_err(COW_ERR_POISONED); TRACE("WARNING: attempted to clone poisoned object at %p", (const void*)cow); + return NULL; } cow_t clone; diff --git a/src/error.cpp b/src/error.cpp index ac3c41c..eb2da9e 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -21,6 +21,7 @@ namespace _cow_error { setmsg(ret, COW_ERR_FDCREATE, "failed to create shmfd (memfd_create())"); setmsg(ret, COW_ERR_SIZE, "failed to set shmfd size (ftruncate())"); setmsg(ret, COW_ERR_MAP, "failed to map shmfd (mmap())"); + setmsg(ret, COW_ERR_POISONED, "trying to use a poisoned cow"); return ret; }