[lxc-devel] [lxc/master] lxclock: change error log using strerror to SYSERROR
2xsec on Github
lxc-bot at linuxcontainers.org
Fri Jul 13 12:34:27 UTC 2018
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 422 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180713/8042b607/attachment.bin>
-------------- next part --------------
From 79cda71dc9b960f096d02c98fbd1771469ebcead Mon Sep 17 00:00:00 2001
From: 2xsec <dh48.jeong at samsung.com>
Date: Fri, 13 Jul 2018 21:33:09 +0900
Subject: [PATCH] lxclock: change error log using strerror to SYSERROR
Signed-off-by: 2xsec <dh48.jeong at samsung.com>
---
src/lxc/lxclock.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/src/lxc/lxclock.c b/src/lxc/lxclock.c
index 29675fb59..8f533fa51 100644
--- a/src/lxc/lxclock.c
+++ b/src/lxc/lxclock.c
@@ -75,7 +75,7 @@ static void lock_mutex(pthread_mutex_t *l)
ret = pthread_mutex_lock(l);
if (ret != 0) {
- fprintf(stderr, "%s - Failed acquire mutex", strerror(ret));
+ SYSERROR("Failed to acquire mutex");
dump_stacktrace();
_exit(EXIT_FAILURE);
}
@@ -87,7 +87,7 @@ static void unlock_mutex(pthread_mutex_t *l)
ret = pthread_mutex_unlock(l);
if (ret != 0) {
- fprintf(stderr, "%s - Failed to release mutex", strerror(ret));
+ SYSERROR("Failed to release mutex");
dump_stacktrace();
_exit(EXIT_FAILURE);
}
@@ -111,6 +111,7 @@ static char *lxclock_name(const char *p, const char *n)
rundir = get_rundir();
if (!rundir)
return NULL;
+
len += strlen(rundir);
if ((dest = malloc(len)) == NULL) {
@@ -124,6 +125,7 @@ static char *lxclock_name(const char *p, const char *n)
free(rundir);
return NULL;
}
+
ret = mkdir_p(dest, 0755);
if (ret < 0) {
free(dest);
@@ -137,6 +139,7 @@ static char *lxclock_name(const char *p, const char *n)
free(dest);
return NULL;
}
+
return dest;
}
@@ -148,11 +151,13 @@ static sem_t *lxc_new_unnamed_sem(void)
s = malloc(sizeof(*s));
if (!s)
return NULL;
+
ret = sem_init(s, 0, 1);
if (ret) {
free(s);
return NULL;
}
+
return s;
}
@@ -171,6 +176,7 @@ struct lxc_lock *lxc_newlock(const char *lxcpath, const char *name)
free(l);
l = NULL;
}
+
goto out;
}
@@ -181,6 +187,7 @@ struct lxc_lock *lxc_newlock(const char *lxcpath, const char *name)
l = NULL;
goto out;
}
+
l->u.f.fd = -1;
out:
@@ -200,10 +207,12 @@ int lxclock(struct lxc_lock *l, int timeout)
saved_errno = errno;
} else {
struct timespec ts;
+
if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {
ret = -2;
goto out;
}
+
ts.tv_sec += timeout;
ret = sem_timedwait(l->u.sem, &ts);
if (ret < 0)
@@ -216,10 +225,12 @@ int lxclock(struct lxc_lock *l, int timeout)
ERROR("Error: timeout not supported with flock");
goto out;
}
+
if (!l->u.f.fname) {
ERROR("Error: filename not set for flock");
goto out;
}
+
if (l->u.f.fd == -1) {
l->u.f.fd = open(l->u.f.fname, O_CREAT | O_RDWR | O_NOFOLLOW | O_CLOEXEC | O_NOCTTY, S_IWUSR | S_IRUSR);
if (l->u.f.fd == -1) {
@@ -228,9 +239,12 @@ int lxclock(struct lxc_lock *l, int timeout)
goto out;
}
}
+
memset(&lk, 0, sizeof(struct flock));
+
lk.l_type = F_WRLCK;
lk.l_whence = SEEK_SET;
+
ret = fcntl(l->u.f.fd, F_OFD_SETLKW, &lk);
if (ret < 0) {
if (errno == EINVAL)
@@ -262,14 +276,17 @@ int lxcunlock(struct lxc_lock *l)
case LXC_LOCK_FLOCK:
if (l->u.f.fd != -1) {
memset(&lk, 0, sizeof(struct flock));
+
lk.l_type = F_UNLCK;
lk.l_whence = SEEK_SET;
+
ret = fcntl(l->u.f.fd, F_OFD_SETLK, &lk);
if (ret < 0) {
if (errno == EINVAL)
ret = flock(l->u.f.fd, LOCK_EX | LOCK_NB);
saved_errno = errno;
}
+
close(l->u.f.fd);
l->u.f.fd = -1;
} else
@@ -292,6 +309,7 @@ void lxc_putlock(struct lxc_lock *l)
{
if (!l)
return;
+
switch(l->type) {
case LXC_LOCK_ANON_SEM:
if (l->u.sem) {
@@ -305,6 +323,7 @@ void lxc_putlock(struct lxc_lock *l)
close(l->u.f.fd);
l->u.f.fd = -1;
}
+
free(l->u.f.fname);
l->u.f.fname = NULL;
break;
@@ -338,10 +357,12 @@ int container_disk_lock(struct lxc_container *c)
if ((ret = lxclock(c->privlock, 0)))
return ret;
+
if ((ret = lxclock(c->slock, 0))) {
lxcunlock(c->privlock);
return ret;
}
+
return 0;
}
More information about the lxc-devel
mailing list