kiely@lownlab.UUCP (James P. Kiely) (03/14/86)
In the "4.2BSD Line Printer Spooler Manual" it states that "The
output filter of is ... started only once ... [with] no provi-
sion ... [for] identifying the beginning and end of jobs ... ".
I originally thought that this meant that OF was started up once
for the entire duration of the life of the lpd Master Daemon.
But as far as I can tell from the sources (specifically
printjob.c) OF is started (in the routine openpr) each time the
print queue starts up, i.e. each time the print queue was
empty and now has something to print. This is the only time the
OF filter is started. It is not restarted for every job. For
instance, if there are five jobs in the queue at the same time,
they will all be processed by the same OF filter process.
Therefore the OF filter should not exit upon seeing EOF on the
input.
The question is: how does OF know when to exit?
The only time it receives a signal other than SIGCONT is during
abortpr() which is only called if printjob() receives a signal.
Under normal printing conditions, printjob() simply exit's(0) if
there is no more work to do. The IF filter is started for each
job and is waited for and as such does not have this problem.
Therefore, one can avoid the OF exiting problem by using IF and
not OF as long as the banner page does not have to go through a
filter. But I would like to run the banner page through a filter
and I would also like to know the correct solution to this prob-
lem.
Please respond directly to me by email. I will summarize the
responses to the net. If I am doing something stupid, please be
kind; after all I was raised on hardware.
--
NAME: James P. Kiely USPS: Lown Cardiovascular Laboratory
USENET: ...!harvard!lownlab!kiely Harvard School of Public Health
PHONE: +1 617 732 1307 665 Huntington Avenue
Boston, MA 02115-9915