- Updated filters to 3.0-20080507.
This commit is contained in:
		
							parent
							
								
									36c2a2eee7
								
							
						
					
					
						commit
						7be961f8d3
					
				| @ -53,3 +53,4 @@ foomatic-db-3.0-20080211.tar.gz | ||||
| foomatic-db-engine-3.0-20080211.tar.gz | ||||
| foomatic-db-hpijs-20080211.tar.gz | ||||
| foomatic-filters-3.0-20080211.tar.gz | ||||
| foomatic-filters-3.0-20080507.tar.gz | ||||
|  | ||||
| @ -1,312 +0,0 @@ | ||||
| diff -up foomatic-filters-3.0-20080211/foomatic-rip.in.clean-up-on-cancel foomatic-filters-3.0-20080211/foomatic-rip.in
 | ||||
| --- foomatic-filters-3.0-20080211/foomatic-rip.in.clean-up-on-cancel	2008-02-11 21:16:36.000000000 +0000
 | ||||
| +++ foomatic-filters-3.0-20080211/foomatic-rip.in	2008-03-13 11:42:35.000000000 +0000
 | ||||
| @@ -155,19 +155,19 @@ my $EXIT_PRNERR_NORETRY = 2;  # printer 
 | ||||
|  my $EXIT_JOBERR = 3;          # job is defective | ||||
|  my $EXIT_SIGNAL = 4;          # terminated after catching signal | ||||
|  my $EXIT_ENGAGED = 5;         # printer is otherwise engaged (connection  | ||||
| -                           # refused)
 | ||||
| +                              # refused)
 | ||||
|  my $EXIT_STARVED = 6;         # starved for system resources | ||||
|  my $EXIT_PRNERR_NORETRY_ACCESS_DENIED = 7;     # bad password? bad port | ||||
| -                                            # permissions?
 | ||||
| +                                               # permissions?
 | ||||
|  my $EXIT_PRNERR_NOT_RESPONDING = 8;            # just doesn't answer at all  | ||||
| -                                            # (turned off?)
 | ||||
| +                                               # (turned off?)
 | ||||
|  my $EXIT_PRNERR_NORETRY_BAD_SETTINGS = 9;      # interface settings are invalid | ||||
|  my $EXIT_PRNERR_NO_SUCH_ADDRESS = 10;          # address lookup failed, may be  | ||||
| -                                            # transient
 | ||||
| +                                               # transient
 | ||||
|  my $EXIT_PRNERR_NORETRY_NO_SUCH_ADDRESS = 11;  # address lookup failed, not  | ||||
| -                                            # transient
 | ||||
| +                                               # transient
 | ||||
|  my $EXIT_INCAPABLE = 50;                       # printer wants (lacks) features | ||||
| -                                            # or resources
 | ||||
| +                                               # or resources
 | ||||
|  # Standard Unix signal names | ||||
|  #my SIGHUP = 1; | ||||
|  #my SIGINT = 2; | ||||
| @@ -181,6 +181,21 @@ my $EXIT_INCAPABLE = 50;                
 | ||||
|   | ||||
|  my $ESPIPE = 29;	# the errno value when seeking a pipe or socket | ||||
|   | ||||
| +# The modern_shell() function will register the PIDs of all shell calls,
 | ||||
| +# so that rip_die() can kill these processes 
 | ||||
| +my %pids;
 | ||||
| +
 | ||||
| +# $kidgeneration stays 0 for the main process, child processes of the
 | ||||
| +# main process get $kidgeneration = 1, their children 2, ...
 | ||||
| +my $kidgeneration = 0;
 | ||||
| +
 | ||||
| +# Catch signals
 | ||||
| +my $retval = $EXIT_PRINTED;
 | ||||
| +use sigtrap qw(handler set_exit_canceled normal-signals
 | ||||
| +               handler set_exit_error error-signals
 | ||||
| +               handler set_exit_prnerr USR1 
 | ||||
| +	       handler set_exit_prnerr_noretry USR2
 | ||||
| +	       handler set_exit_engaged TTIN);
 | ||||
|   | ||||
|   | ||||
|  ## Some important variables | ||||
| @@ -2153,7 +2168,7 @@ if ($debug) {
 | ||||
|  } | ||||
|   | ||||
|   | ||||
| -	    
 | ||||
| +
 | ||||
|  ## From here on we have to repeat all the rest of the program for | ||||
|  ## every file to print | ||||
|   | ||||
| @@ -3538,13 +3553,8 @@ sub getrendererhandle {
 | ||||
|   | ||||
|      print $logh "${added_lf}Starting renderer\n"; | ||||
|   | ||||
| -    # Catch signals
 | ||||
| +    # Reset return value of the renderer
 | ||||
|      $retval = $EXIT_PRINTED; | ||||
| -    use sigtrap qw(handler set_exit_prnerr USR1 
 | ||||
| -		   handler set_exit_prnerr_noretry USR2
 | ||||
| -		   handler set_exit_engaged TTIN);
 | ||||
| -
 | ||||
| -    # Variables for the kid processes reporting their state
 | ||||
|   | ||||
|      # Set up a pipe for the kids to pass their exit stat to the main process | ||||
|      pipe KID_MESSAGE, KID_MESSAGE_IN; | ||||
| @@ -3585,6 +3595,8 @@ sub getrendererhandle {
 | ||||
|          return ( *KID3, $kid3 ); | ||||
|   | ||||
|      } else { | ||||
| +	$kidgeneration += 1;
 | ||||
| +
 | ||||
|          close KID3; | ||||
|   | ||||
|          pipe KID4_IN, KID4; | ||||
| @@ -3774,6 +3786,8 @@ sub getrendererhandle {
 | ||||
|  	    print $logh "KID3 finished\n"; | ||||
|  	    exit $EXIT_PRINTED; | ||||
|          } else { | ||||
| +	    $kidgeneration += 1;
 | ||||
| +
 | ||||
|              # child, trailing task on the pipe; we write jcl stuff | ||||
|              close KID4; | ||||
|  	    close KID3_IN; | ||||
| @@ -4112,6 +4126,8 @@ sub getfileconverterhandle {
 | ||||
|          return ( *KID1_IN, $kid1 ); | ||||
|   | ||||
|      } else { | ||||
| +	$kidgeneration += 1;
 | ||||
| +
 | ||||
|  	# We go on reading the job data and stuff it into the file | ||||
|  	# converter | ||||
|          close KID1_IN; | ||||
| @@ -4253,6 +4269,8 @@ sub getfileconverterhandle {
 | ||||
|  	    print $logh "KID1 finished\n"; | ||||
|  	    exit $EXIT_PRINTED; | ||||
|          } else { | ||||
| +	    $kidgeneration += 1;
 | ||||
| +
 | ||||
|              # child, first part of the pipe, reading in the data from | ||||
|  	    # standard input and stuffing it into the file converter | ||||
|  	    # after putting in the already read data (in $alreadyread) | ||||
| @@ -4580,6 +4598,8 @@ sub getdocgeneratorhandle {
 | ||||
|          return ( *KID0_IN, $kid0 ); | ||||
|      } | ||||
|   | ||||
| +    $kidgeneration += 1;
 | ||||
| +
 | ||||
|      # we are the kid; we generate the documentation page | ||||
|   | ||||
|      close KID0_IN; | ||||
| @@ -4867,66 +4887,100 @@ sub rip_die {
 | ||||
|      my $errmsg = "$!"; | ||||
|      my $errcod = $! + 0; | ||||
|   | ||||
| -    # Close the documentation page generator (if it was used)
 | ||||
| -    if ($docgeneratorpid) {
 | ||||
| -	if ($kid0) {
 | ||||
| -	    print $logh "Killing process $kid0 (KID0)\n";
 | ||||
| -	    kill(9, $kid0);
 | ||||
| +    # Log that we are dying ...
 | ||||
| +    print $logh "Process dying with \"$message\", exit stat: $exitstat\n\terror: $errmsg ($errcod)\n";
 | ||||
| +
 | ||||
| +    print $logh "Cleaning up ...\n";
 | ||||
| +    foreach my $killsignal (15, 9) {
 | ||||
| +
 | ||||
| +	# Kill all registered subshells
 | ||||
| +	foreach my $pid (keys %pids) {
 | ||||
| +	    print $logh "Killing process $pid ($pids{$pid}) and its subprocesses with signal $killsignal\n";
 | ||||
| +	    # This call kills the process group with group ID $pid, the
 | ||||
| +	    # group which was formed from the initial process $pid which
 | ||||
| +	    # contains $pid and all its subprocesses
 | ||||
| +	    kill(-$killsignal, $pid);
 | ||||
| +	    # If the system does not support process groups and therefore
 | ||||
| +	    # the call above does not kill anything, kill at least $pid
 | ||||
| +	    kill($killsignal, $pid);
 | ||||
|  	} | ||||
| -	$docgeneratorpid = 0;
 | ||||
| -    }
 | ||||
|   | ||||
| -    # Close the file converter (if it was used)
 | ||||
| -    if ($fileconverterpid) {
 | ||||
| +	# Close the documentation page generator (if it was used)
 | ||||
| +	if ($kid0) {
 | ||||
| +	    print $logh "Killing process $kid0 (KID0) with signal $killsignal\n";
 | ||||
| +	    kill($killsignal, $kid0);
 | ||||
| +	}
 | ||||
| +	
 | ||||
| +	# Close the file converter (if it was used)
 | ||||
|  	if ($kid2) { | ||||
| -	    print $logh "Killing process $kid2 (KID2)\n";
 | ||||
| -	    kill(9, $kid2);
 | ||||
| +	    print $logh "Killing process $kid2 (KID2) with signal $killsignal\n";
 | ||||
| +	    kill($killsignal, $kid2);
 | ||||
|  	} | ||||
|  	if ($kid1) { | ||||
| -	    print $logh "Killing process $kid1 (KID1)\n";
 | ||||
| -	    kill(9, $kid1);
 | ||||
| +	    print $logh "Killing process $kid1 (KID1) with signal $killsignal\n";
 | ||||
| +	    kill($killsignal, $kid1);
 | ||||
|  	} | ||||
| -	$fileconverterpid = 0;
 | ||||
| -    }
 | ||||
|   | ||||
| -    # Close the renderer
 | ||||
| -    if ($rendererpid) {
 | ||||
| +	# Close the renderer
 | ||||
|  	if ($kid4) { | ||||
| -	    print $logh "Killing process $kid4 (KID4)\n";
 | ||||
| -	    kill(9, $kid4);
 | ||||
| +	    print $logh "Killing process $kid4 (KID4) with signal $killsignal\n";
 | ||||
| +	    kill($killsignal, $kid4);
 | ||||
|  	} | ||||
|  	if ($kid3) { | ||||
| -	    print $logh "Killing process $kid3 (KID3)\n";
 | ||||
| -	    kill(9, $kid3);
 | ||||
| +	    print $logh "Killing process $kid3 (KID3) with signal $killsignal\n";
 | ||||
| +	    kill($killsignal, $kid3);
 | ||||
|  	} | ||||
| -	$rendererpid = 0;
 | ||||
| +
 | ||||
| +	# Wait some time for the processes to close
 | ||||
| +	sleep(5 - $kidgeneration) if $killsignal != 9;
 | ||||
|      } | ||||
|   | ||||
| -    print $logh "Process dying with \"$message\", exit stat: $exitstat\n\terror: $errmsg ($errcod)\n";
 | ||||
| -    if ($spooler eq 'ppr_int') {
 | ||||
| -	# Special error handling for PPR intefaces
 | ||||
| -	$message =~ s/\\/\\\\/;
 | ||||
| -	$message =~ s/\"/\\\"/;
 | ||||
| -	my @messagelines = split("\n", $message);
 | ||||
| -	my $firstline = "TRUE";
 | ||||
| -	for my $line (@messagelines) {
 | ||||
| -	    modern_system("lib/alert $printer $firstline \"$line\"");
 | ||||
| -	    $firstline = "FALSE";
 | ||||
| +    # Do the debug dump and the PPR error handling only from the main process
 | ||||
| +    if ($kidgeneration == 0) { # We are the main process
 | ||||
| +
 | ||||
| +	if ($spooler eq 'ppr_int') {
 | ||||
| +	    # Special error handling for PPR intefaces
 | ||||
| +	    $message =~ s/\\/\\\\/;
 | ||||
| +	    $message =~ s/\"/\\\"/;
 | ||||
| +	    my @messagelines = split("\n", $message);
 | ||||
| +	    my $firstline = "TRUE";
 | ||||
| +	    for my $line (@messagelines) {
 | ||||
| +		modern_system("lib/alert $printer $firstline \"$line\"");
 | ||||
| +		$firstline = "FALSE";
 | ||||
| +	    }
 | ||||
| +	} else {
 | ||||
| +	    print STDERR $message . "\n";
 | ||||
| +	}
 | ||||
| +	if ($debug) {
 | ||||
| +	    use Data::Dumper;
 | ||||
| +	    local $Data::Dumper::Purity=1;
 | ||||
| +	    local $Data::Dumper::Indent=1;
 | ||||
| +	    print $logh Dumper($dat);
 | ||||
|  	} | ||||
| -    } else {
 | ||||
| -	print STDERR $message . "\n";
 | ||||
| -    }
 | ||||
| -    if ($debug) {
 | ||||
| -	use Data::Dumper;
 | ||||
| -	local $Data::Dumper::Purity=1;
 | ||||
| -	local $Data::Dumper::Indent=1;
 | ||||
| -	print $logh Dumper($dat);
 | ||||
|      } | ||||
| +
 | ||||
| +    ## The End
 | ||||
| +    print $logh "${added_lf}Closing foomatic-rip.\n";
 | ||||
| +    close $logh;
 | ||||
| +
 | ||||
|      exit $exitstat; | ||||
|  } | ||||
|   | ||||
|  # Signal handling routines | ||||
|   | ||||
| +sub do_nothing {
 | ||||
| +}
 | ||||
| +
 | ||||
| +sub set_exit_canceled {
 | ||||
| +    $retval = $EXIT_PRINTED;
 | ||||
| +    rip_die ("Caught termination signal: Job canceled", $retval);
 | ||||
| +}
 | ||||
| +
 | ||||
| +sub set_exit_error {
 | ||||
| +    $retval = $EXIT_SIGNAL;
 | ||||
| +    rip_die ("Caught error signal: Error in renderer, driver, or foomatic-rip", $retval);
 | ||||
| +}
 | ||||
| +
 | ||||
|  sub set_exit_prnerr { | ||||
|      $retval = $EXIT_PRNERR; | ||||
|  } | ||||
| @@ -6592,20 +6646,36 @@ sub read_attribute_file {
 | ||||
|  sub modern_system { | ||||
|      my (@list) = @_; | ||||
|   | ||||
| -    if (($modern_shell =~ /.+/) && ($modern_shell ne '/bin/sh')) {
 | ||||
| -        # a "modern" shell other than the default shell was specified
 | ||||
| -        my $pid = fork();
 | ||||
| -
 | ||||
| -        ($pid < 0) && die "failed to fork()";
 | ||||
| -
 | ||||
| -        if ($pid == 0) {  # child, execute the commands under a modern shell
 | ||||
| -            exec($modern_shell, "-c", @list);
 | ||||
| -            die "exec($modern_shell, \"-c\", @list);";
 | ||||
| -        } else {  # parent, wait for the child
 | ||||
| -            waitpid($pid, 0);
 | ||||
| -        }
 | ||||
| -    } else {  # the system shell is "modern" enough.
 | ||||
| -        system(@list);
 | ||||
| +    if ($modern_shell |~ /.+/) {
 | ||||
| +        # No "modern" shell other than the default shell was specified
 | ||||
| +	$modern_shell = '/bin/sh';
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    my $pid = fork();
 | ||||
| +    ($pid < 0) && die "failed to fork()";
 | ||||
| +
 | ||||
| +    if ($pid == 0) {  # child, execute the commands under a modern shell
 | ||||
| +	# If the system supports process groups, we create a process
 | ||||
| +	# group of this subshell process. All the children of this
 | ||||
| +	# process (calls of external filters, renderers, or drivers)
 | ||||
| +	# will be members of this process group and so by killing this
 | ||||
| +	# process group we can kill all subprocesses and so we can
 | ||||
| +	# cleanly cancel print jobs
 | ||||
| +	eval("setpgrp()");
 | ||||
| +	# Stop catching signals
 | ||||
| +	#use sigtrap qw(die normal-signals error-signals
 | ||||
| +        #               handler do_nothing USR1 USR2 TTIN);
 | ||||
| +	exec($modern_shell, "-c", @list);
 | ||||
| +	rip_die("exec($modern_shell, \"-c\", @list);",
 | ||||
| +		$EXIT_PRNERR_NORETRY_BAD_SETTINGS);
 | ||||
| +    } else { # parent, register child's PID, wait for the child, and
 | ||||
| +	     # unregister the PID
 | ||||
| +	$pids{$pid} = substr(join(" ", @list), 0, 100) .
 | ||||
| +	    (length(join(" ", @list)) > 100 ? "..." : "");
 | ||||
| +	print $logh "Starting process $pid: \"$pids{$pid}\"\n";
 | ||||
| +	waitpid($pid, 0);
 | ||||
| +	print $logh "Process $pid ending: \"$pids{$pid}\"\n";
 | ||||
| +	delete $pids{$pid};
 | ||||
|      } | ||||
|  } | ||||
|   | ||||
| @ -1,6 +1,6 @@ | ||||
| %define dbver 20080211 | ||||
| %define enginever 3.0-20080211 | ||||
| %define filtersver 20080211 | ||||
| %define filtersver 20080507 | ||||
| %define hpijsver 20080211 | ||||
| 
 | ||||
| Summary: Foomatic printer database. | ||||
| @ -43,7 +43,6 @@ Patch15: foomatic-bad-utf8.patch | ||||
| # Missing IEEE 1284 IDs. | ||||
| Patch16: foomatic-ieee1284.patch | ||||
| 
 | ||||
| Patch17: foomatic-clean-up-on-cancel.patch | ||||
| Patch18: foomatic-sigpipe.patch | ||||
| 
 | ||||
| Url:		http://www.linuxprinting.org | ||||
| @ -89,7 +88,6 @@ The site http://www.linuxprinting.org/ is based on this database. | ||||
| pushd foomatic-filters-3.0-%{filtersver} | ||||
| %patch1 -p1 -b .libdir | ||||
| %patch5 -p1 -b .fontpath | ||||
| %patch17 -p1 -b .clean-up-on-cancel | ||||
| %patch18 -p1 -b .sigpipe | ||||
| ./make_configure | ||||
| popd | ||||
| @ -250,6 +248,9 @@ rm -fr %buildroot $RPM_BUILD_DIR/%{name} | ||||
| %{_var}/cache/foomatic | ||||
| 
 | ||||
| %changelog | ||||
| * Thu May  8 2008 Tim Waugh <twaugh@redhat.com> | ||||
| - Updated filters to 3.0-20080507. | ||||
| 
 | ||||
| * Wed May  7 2008 Tim Waugh <twaugh@redhat.com> | ||||
| - Avoid busy-looping when the CUPS backend stops (bug #445555). | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										2
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								sources
									
									
									
									
									
								
							| @ -1,4 +1,4 @@ | ||||
| 5d827cd3d95807c28609d49a5c412c29  foomatic-db-3.0-20080211.tar.gz | ||||
| ba8b08913589568f85548998f6321f95  foomatic-db-engine-3.0-20080211.tar.gz | ||||
| 58bef426f769219592b6b0c81357a04a  foomatic-db-hpijs-20080211.tar.gz | ||||
| 97b517e94ac85534cdc84a446a872bc2  foomatic-filters-3.0-20080211.tar.gz | ||||
| bb02f5036f73c5302ba4739ca2a7339a  foomatic-filters-3.0-20080507.tar.gz | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user