diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2012-03-01 09:54:23 +0000 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2012-03-01 09:54:23 +0000 |
commit | f9467799c171d66fe7f73a095050f8a08149b7b6 (patch) | |
tree | f3fee686b02e0de2b8b378058fe6f0dad3fe376a /daemons | |
parent | ce1c28af1973457a9a661ce5c613bdec7761ae50 (diff) | |
download | lvm2-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.c | 17 |
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; } |