17 fprintf(stderr,
"Error running arb_sync: %s\n", err);
52 bool value_reached =
false;
53 const long MIN_DELAY = 250;
54 const long MAX_DELAY = 3500;
57 while (!value_reached) {
58 const char *currentValue =
NULp;
64 fprintf(stderr,
"Error running arb_sync: failed to GB_read_sync_value: %s (will retry)\n", error);
70 if (strcmp(currentValue, wantedValue) == 0) {
71 fprintf(stderr,
"Sync '%s' reached wanted value '%s'\n", ID, currentValue);
76 fprintf(stderr,
"Sync '%s' has value '%s' (waiting for '%s')\n", ID, currentValue, wantedValue);
77 delay_ms =
std::min(MAX_DELAY, loop * 77 + MIN_DELAY);
99 "Usage: arb_sync <modeflag> <ID> <value>\n"
100 "Purpose: Use the running arb database to synchronise processes.\n"
101 "<ID>::= a unique identifier for synchronisation\n"
102 "<value>::= used value\n"
104 " --write store specified value for ID\n"
105 " --wait wait until ID reaches specified value\n"
107 fputs(usage, stderr);
110 fprintf(stderr,
"Error in arb_sync: %s\n", error);
119 strcmp(arg,
"--help") == 0 ||
120 strcmp(arg,
"-h") == 0;
126 const char *mode =
NULp;
128 const char *value =
NULp;
131 const char *arg = argv[1];
133 if (!mode) mode = arg;
134 else if (!ID) ID = arg;
135 else if (!value) value = arg;
141 if (!mode) exitcode =
show_usage(
"missing argument <modeflag>");
143 else if (!ID) exitcode =
show_usage(
"missing argument <ID>");
144 else if (!value) exitcode =
show_usage(
"missing argument <value>");
146 if (strcmp(mode,
"--write") == 0) exitcode =
arb_sync_write(ID, value);
147 else if (strcmp(mode,
"--wait") == 0) exitcode =
arb_sync_wait(ID, value);
GBDATA * GB_open(const char *path, const char *opent)
static int exitcodeFrom(GB_ERROR error)
int ARB_main(int argc, char *argv[])
const char * GBS_global_string(const char *templat,...)
static int arb_sync_wait(const char *ID, const char *wantedValue)
GB_ERROR GB_await_error()
static int show_usage(const char *error)
static void error(const char *msg)
GB_CSTR GB_read_sync_value(GBDATA *gb_main, const char *id)
GB_ERROR GB_write_sync_value(GBDATA *gb_main, const char *id, const char *value)
void ARB_sleep(int amount, TimeUnit tu)
static void report_error(GB_ERROR err)
fputs(TRACE_PREFIX, stderr)
GB_ERROR close(GB_ERROR error)
static bool requests_help(const char *arg)
GB_transaction ta(gb_var)
static int arb_sync_write(const char *ID, const char *value)
void GB_close(GBDATA *gbd)