allow clean re-exec for smoother upgrades (closes MS #2532)
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Tue, 12 Oct 2010 07:46:08 +0000 (03:46 -0400)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Tue, 12 Oct 2010 07:46:08 +0000 (03:46 -0400)
Changelog
Crypt/Monkeysphere/MSVA.pm

index d885931f5296ac34dc4e60bcf136373f3c03ff93..b4add1a0acf179f4ca4ef06bc1f80fcba2967e98 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -7,6 +7,10 @@ msva-perl (0.5~pre) unstable; urgency=low
   * Conditionally rely on Gtk2 perl module -- no marginal UI without it,
     but you can also install the MSVA now without needing to pull in a
     bunch of Gtk libs (closes MS #2514)
+  * Sending a SIGHUP to the running server now re-execs it cleanly,
+    keeping the same port assignments and monitoring the same child
+    process.  This can be used to upgrade running msva instances after a
+    package update (closes MS #2532)
 
  -- Daniel Kahn Gillmor <dkg@fifthhorseman.net>  Mon, 11 Oct 2010 16:02:22 -0400
 
index e620a4cf73cdeffbfe7f13bf79c4ed7633906d56..d4c5852de58acfb62586d8e3eb0eeaecefc0569a 100755 (executable)
     }
     $self->port($port);
 
-    my $argcount = @ARGV;
-    if ($argcount) {
+    if ((exists $ENV{MSVA_CHILD_PID}) && ($ENV{MSVA_CHILD_PID} ne '')) {
+      # this is most likely a re-exec.
+      msvalog('info', "This appears to be a re-exec, monitoring child pid %d\n", $ENV{MSVA_CHILD_PID});
+      $self->{child_pid} = $ENV{MSVA_CHILD_PID} + 0;
+    } elsif ($#ARGV >= 0) {
       $self->{child_pid} = 0; # indicate that we are planning to fork.
       my $fork = fork();
       if (! defined $fork) {
         if ($fork) {
           msvalog('debug', "Child process has PID %d\n", $fork);
           $self->{child_pid} = $fork;
+          $ENV{MSVA_CHILD_PID} = $fork;
         } else {
           msvalog('verbose', "PID %d executing: \n", $$);
           for my $arg (@ARGV) {