From 45bfce46d24db91d25b85a5115c2b41d4a1484fc Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 23 Aug 2015 20:49:52 +0000 Subject: do not die on OOM when for mgmt paths This also makes trywrite OOM-aware and will simulate a write error on allocation. --- mgmt_fn.c | 11 ++++++++++- trywrite.c | 8 ++++++-- 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; -- cgit v1.2.3-24-ge0c7