summaryrefslogtreecommitdiffstats
path: root/daemons
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2012-03-01 09:54:23 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2012-03-01 09:54:23 +0000
commitf9467799c171d66fe7f73a095050f8a08149b7b6 (patch)
treef3fee686b02e0de2b8b378058fe6f0dad3fe376a /daemons
parentce1c28af1973457a9a661ce5c613bdec7761ae50 (diff)
downloadlvm2-f9467799c171d66fe7f73a095050f8a08149b7b6.tar.gz
lvm2-f9467799c171d66fe7f73a095050f8a08149b7b6.tar.xz
lvm2-f9467799c171d66fe7f73a095050f8a08149b7b6.zip
Check for allocation error
return ENOMEM when malloc fails.
Diffstat (limited to 'daemons')
-rw-r--r--daemons/clvmd/lvm-functions.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c
index eeb08b03..e02e7731 100644
--- a/daemons/clvmd/lvm-functions.c
+++ b/daemons/clvmd/lvm-functions.c
@@ -167,11 +167,15 @@ static struct lv_info *lookup_info(const char *resource)
return lvi;
}
-static void insert_info(const char *resource, struct lv_info *lvi)
+static int insert_info(const char *resource, struct lv_info *lvi)
{
+ int ret;
+
pthread_mutex_lock(&lv_hash_lock);
- dm_hash_insert(lv_hash, resource, lvi);
+ ret = dm_hash_insert(lv_hash, resource, lvi);
pthread_mutex_unlock(&lv_hash_lock);
+
+ return ret;
}
static void remove_info(const char *resource)
@@ -277,8 +281,10 @@ static int hold_lock(char *resource, int mode, int flags)
errno = saved_errno;
} else {
lvi = malloc(sizeof(struct lv_info));
- if (!lvi)
+ if (!lvi) {
+ errno = ENOMEM;
return -1;
+ }
lvi->lock_mode = mode;
status = sync_lock(resource, mode, flags & ~LCKF_CONVERT, &lvi->lock_id);
@@ -288,7 +294,10 @@ static int hold_lock(char *resource, int mode, int flags)
DEBUGLOG("hold_lock. lock at %d failed: %s\n", mode,
strerror(errno));
} else
- insert_info(resource, lvi);
+ if (!insert_info(resource, lvi)) {
+ errno = ENOMEM;
+ return -1;
+ }
errno = saved_errno;
}