aboutsummaryrefslogtreecommitdiff
path: root/bbot/agent/agent.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'bbot/agent/agent.cxx')
-rw-r--r--bbot/agent/agent.cxx39
1 files changed, 26 insertions, 13 deletions
diff --git a/bbot/agent/agent.cxx b/bbot/agent/agent.cxx
index eacd05a..80b4fb7 100644
--- a/bbot/agent/agent.cxx
+++ b/bbot/agent/agent.cxx
@@ -64,6 +64,17 @@ file_sync (const path& f)
throw_system_error (errno);
}
+static bool
+file_not_empty (const path& f)
+{
+ if (file_exists (f))
+ {
+ file_sync (f);
+ return !file_empty (f);
+ }
+ return false;
+}
+
// The btrfs tool likes to print informational messages, like "Created
// snapshot such and such". Luckily, it writes them to stdout while proper
// diagnostics to stderr.
@@ -226,12 +237,8 @@ bootstrap_machine (const dir_path& md,
//
for (to = bootstrap_to; to != 0; tftpd.serve (to, 2))
{
- if (file_exists (mf))
- {
- file_sync (mf);
- if (!file_empty (mf))
- break;
- }
+ if (file_not_empty (mf))
+ break;
}
if (to == 0)
@@ -615,9 +622,19 @@ try
{
// Simply wait for the file to appear.
//
- for (size_t i (0); !file_exists (rf); sleep (1))
+ for (size_t i (0);; sleep (1))
+ {
+ if (file_not_empty (rf))
+ {
+ // Wait a bit to make sure we see complete manifest.
+ //
+ sleep (2);
+ break;
+ }
+
if (i++ % 10 == 0)
l3 ([&]{trace << "waiting for result manifest";});
+ }
r = parse_manifest<result_manifest> (rf, "result");
}
@@ -711,12 +728,8 @@ try
//
for (to = build_to; to != 0; tftpd.serve (to, 2))
{
- if (file_exists (rf))
- {
- file_sync (rf);
- if (!file_empty (rf))
- break;
- }
+ if (file_not_empty (rf))
+ break;
}
if (to == 0)