about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2015-08-23 20:49:52 +0000
committerEric Wong <e@80x24.org>2015-08-23 20:49:52 +0000
commit45bfce46d24db91d25b85a5115c2b41d4a1484fc (patch)
tree7db4adb0230e585fbeae52fa0b77ef603e581c9c
parent7754b9ffc1b496170498f78fd2f05409dd0fb962 (diff)
downloadcmogstored-45bfce46d24db91d25b85a5115c2b41d4a1484fc.tar.gz
This also makes trywrite OOM-aware and will simulate a write error
on allocation.
-rw-r--r--mgmt_fn.c11
-rw-r--r--trywrite.c8
2 files changed, 16 insertions, 3 deletions
diff --git a/mgmt_fn.c b/mgmt_fn.c
index c0d4571..a07fa60 100644
--- a/mgmt_fn.c
+++ b/mgmt_fn.c
@@ -17,7 +17,16 @@ get_path(struct iovec *dst, struct mog_mgmt *mgmt, char *buf, bool sdup)
                 char *path;
 
                 if (sdup) {
-                        path = xmalloc(dst->iov_len + 1);
+                        path = malloc(dst->iov_len + 1);
+                        if (!path) {
+                                struct iovec iov;
+
+                                IOV_STR(&iov, "ERROR: out-of-memory\r\n");
+                                mog_mgmt_writev(mgmt, &iov, 1);
+
+                                return NULL;
+                        }
+
                         memcpy(path, dst->iov_base, dst->iov_len);
                 } else {
                         path = dst->iov_base;
diff --git a/trywrite.c b/trywrite.c
index c872609..7ade425 100644
--- a/trywrite.c
+++ b/trywrite.c
@@ -12,10 +12,14 @@ struct mog_wbuf {
 
 static void * wbuf_newv(size_t total, struct iovec *iov, int iovcnt)
 {
-        struct mog_wbuf *wbuf = xmalloc(sizeof(struct mog_wbuf) + total);
-        void *dst = wbuf->buf;
+        struct mog_wbuf *wbuf = malloc(sizeof(struct mog_wbuf) + total);
+        void *dst;
         int i;
 
+        if (!wbuf) return MOG_WR_ERROR;
+
+        dst = wbuf->buf;
+
         wbuf->len = total;
         wbuf->off = 0;