Browse Source

Fix: Processing result of running imapsync command

There was a possibility the status is_running never set back to 0.
Also the unlock command could be executed twice.
hunter-nl 6 years ago
parent
commit
54a039fbd1
1 changed files with 7 additions and 3 deletions
  1. 7 3
      data/Dockerfiles/dovecot/imapsync_cron.pl

+ 7 - 3
data/Dockerfiles/dovecot/imapsync_cron.pl

@@ -154,17 +154,21 @@ while ($row = $sth->fetchrow_arrayref()) {
     
     run [@$generated_cmds, @$custom_params_ref], '&>', \my $stdout;
     
-    $update = $dbh->prepare("UPDATE imapsync SET returned_text = ?, last_run = NOW(), is_running = 0 WHERE id = ?");
+    $update = $dbh->prepare("UPDATE imapsync SET returned_text = ? WHERE id = ?");
     $update->bind_param( 1, ${stdout} );
     $update->bind_param( 2, ${id} );
     $update->execute();
   } catch {
-    $update = $dbh->prepare("UPDATE imapsync SET returned_text = 'Could not start or finish imapsync', last_run = NOW(), is_running = 0 WHERE id = ?");
+    $update = $dbh->prepare("UPDATE imapsync SET returned_text = 'Could not start or finish imapsync' WHERE id = ?");
+    $update->bind_param( 1, ${id} );
+    $update->execute();
+  } finally {
+    $update = $dbh->prepare("UPDATE imapsync SET last_run = NOW(), is_running = 0 WHERE id = ?");
     $update->bind_param( 1, ${id} );
     $update->execute();
-    $lockmgr->unlock($lock_file);
   };
 
+
 }
 
 $sth->finish();