From 6a6a26cda2b25836aedabc901aeb7ca9078e60d1 Mon Sep 17 00:00:00 2001 From: freesource Date: Wed, 19 Dec 2001 19:12:49 +0000 Subject: [PATCH] This was a lot more involved than I first suspected, but the solution was simpler than I thought .. & backgrounds the process .. and then the pid is watched for in /proc to dissappear. So it is very mult-tasking. --- BootRoot/BootRoot.pm | 90 +++++++++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 34 deletions(-) diff --git a/BootRoot/BootRoot.pm b/BootRoot/BootRoot.pm index 9084dbf..39c60be 100644 --- a/BootRoot/BootRoot.pm +++ b/BootRoot/BootRoot.pm @@ -1507,26 +1507,38 @@ sub accept_button { info(0, "Already bzip2 compressed.\n"); } else { - my $command_line = - "$compress -c9 $tmp/$entry_advanced[4]|"; + + info(0,"Compressing $entry_advanced[4] with $compress\n"); - open (PLACE, ">$tmp/$entry_advanced[4].gz"); - open (COMP,"$command_line"); - while () { - print PLACE $_; - while (Gtk->events_pending) - { Gtk->main_iteration; } + system "$compress -c9 $tmp/$entry_advanced[4] > $tmp/$entry_advanced[4].gz&"; + + + $, = ""; + my @ps_check = `ps w -C $compress 2> /dev/null`; + $, = "\n"; + + my @pids; + foreach my $line ( @ps_check ) { + if ( $line =~ + m,$compress -c $tmp/$entry_advanced[4]$, ) { + + my $pid = (split(" ",$line))[0]; + push(@pids,$pid); + } + + } + + foreach my $pid ( @pids ) { + do { + while (Gtk->events_pending) + { Gtk->main_iteration; } + } while -d "/proc/$pid"; } - close(COMP); - close(PLACE); - info(0,"Done compressing $entry_advanced[4] with $compress\n"); -=pod - system - "$compress -c9 $tmp/$entry_advanced[4] > $tmp/$entry_advanced[4].gz"; -=cut - $entry_advanced[4] = "$entry_advanced[4].gz"; - $entry3->set_text("$tmp/$entry_advanced[4]"); + info(0,"Done compressing $entry_advanced[4] with $compress\n"); + $entry_advanced[4] = "$entry_advanced[4].gz"; + $entry3->set_text("$tmp/$entry_advanced[4]"); + } } close(F); @@ -1553,27 +1565,37 @@ sub accept_button { info(0, "Already bzip2 compressed.\n"); } else { - - my $command_line = - "$compress -c $tmp/$entry_advanced[4]|"; + info(0,"Compressing $entry_advanced[4] with $compress\n"); - open (PLACE, ">$tmp/$entry_advanced[4].bz2"); - open (COMP,"$command_line"); - while () { - print PLACE $_; - while (Gtk->events_pending) - { Gtk->main_iteration; } + + + system"$compress -c $tmp/$entry_advanced[4] > $tmp/$entry_advanced[4].bz2&"; + + $, = ""; + my @ps_check = `ps w -C $compress 2> /dev/null`; + $, = "\n"; + + my @pids; + foreach my $line ( @ps_check ) { + if ( $line =~ + m,$compress -c $tmp/$entry_advanced[4]$, ) { + + my $pid = (split(" ",$line))[0]; + push(@pids,$pid); + } + } - close(COMP); - close(PLACE); - info(0,"Done compressing $entry_advanced[4] with $compress\n"); -=pod - system - "$compress -c $tmp/$entry_advanced[4] > $tmp/$entry_advanced[4].bz2"; -=cut + foreach my $pid ( @pids ) { + do { + while (Gtk->events_pending) + { Gtk->main_iteration; } + } while -d "/proc/$pid"; + } + + info(0,"Done compressing $entry_advanced[4] with $compress\n"); $entry_advanced[4] = "$entry_advanced[4].bz2"; - $entry3->set_text("$tmp/$entry_advanced[4]"); + $entry3->set_text("$tmp/$entry_advanced[4]"); } }