Add option timeout in command sync

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2018-06-03 18:02:34 +00:00
parent c7fed357fb
commit da350aff9c
3 changed files with 14 additions and 8 deletions

2
mud

Submodule mud updated: 964672adb5...6ebda9368c

View File

@@ -290,8 +290,8 @@ gt_bind(int argc, char **argv)
res.status.peer = peer_addr;
break;
case CTL_SYNC:
if (mud_send(mud, NULL, 0, 0) == -1)
res.ret = errno;
mud_send(mud, NULL, 0, 0);
res.ms = mud_get_sync_elapsed_msec(mud);
break;
}
if (sendto(ctl_fd, &res, sizeof(res), 0,

View File

@@ -8,7 +8,7 @@
#include <dirent.h>
static int
gt_sync_dev(const char *dev)
gt_sync_dev(const char *dev, unsigned long timeout)
{
const int fd = ctl_connect(GT_RUNDIR, dev);
@@ -22,10 +22,14 @@ gt_sync_dev(const char *dev)
.type = CTL_SYNC,
};
const int ret = ctl_reply(fd, &res, &req);
int ret = ctl_reply(fd, &res, &req);
if (ret == -1)
if (!ret) {
if (res.ms > timeout)
ret = 1;
} else {
perror("sync");
}
ctl_delete(fd);
@@ -36,16 +40,18 @@ int
gt_sync(int argc, char **argv)
{
const char *dev = NULL;
unsigned long timeout = 20000;
struct argz syncz[] = {
{"dev", "NAME", &dev, argz_str},
{"timeout", "SECONDS", &timeout, argz_time},
{NULL}};
if (argz(syncz, argc, argv))
return 1;
if (dev)
return !!gt_sync_dev(dev);
return !!gt_sync_dev(dev, timeout);
DIR *dp = opendir(GT_RUNDIR);
@@ -61,7 +67,7 @@ gt_sync(int argc, char **argv)
while (d = readdir(dp), d) {
if (d->d_name[0] != '.')
ret |= !!gt_sync_dev(d->d_name);
ret |= !!gt_sync_dev(d->d_name, timeout);
}
closedir(dp);