diff --git a/mud b/mud index 964672a..6ebda93 160000 --- a/mud +++ b/mud @@ -1 +1 @@ -Subproject commit 964672adb53317de45718fbc66e5cf7f2674c2fb +Subproject commit 6ebda9368c8afdf384523fa47ac06a31d3534221 diff --git a/src/bind.c b/src/bind.c index 07343a3..8ffa4e9 100644 --- a/src/bind.c +++ b/src/bind.c @@ -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, diff --git a/src/sync.c b/src/sync.c index 8cf7188..8c96831 100644 --- a/src/sync.c +++ b/src/sync.c @@ -8,7 +8,7 @@ #include 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);