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; res.status.peer = peer_addr;
break; break;
case CTL_SYNC: case CTL_SYNC:
if (mud_send(mud, NULL, 0, 0) == -1) mud_send(mud, NULL, 0, 0);
res.ret = errno; res.ms = mud_get_sync_elapsed_msec(mud);
break; break;
} }
if (sendto(ctl_fd, &res, sizeof(res), 0, if (sendto(ctl_fd, &res, sizeof(res), 0,

View File

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