aboutsummaryrefslogtreecommitdiffstats
path: root/plpprint
diff options
context:
space:
mode:
authorFritz Elfert <felfert@to.com>2002-08-06 02:07:18 +0000
committerFritz Elfert <felfert@to.com>2002-08-06 02:07:18 +0000
commitc72c0680054bcd319e21033d80c8fb25aeef3236 (patch)
tree9b2c4ed06b765d3843bd1bacd69deda0eae45084 /plpprint
parent1259fb620241150653b231fb8fa774fc4f0598c8 (diff)
downloadplptools-c72c0680054bcd319e21033d80c8fb25aeef3236.tar.gz
plptools-c72c0680054bcd319e21033d80c8fb25aeef3236.tar.bz2
plptools-c72c0680054bcd319e21033d80c8fb25aeef3236.zip
- Bugfix: When waiting for job, disconnecting the Psion resulted in
undelayed loop and high CPU usage.
Diffstat (limited to 'plpprint')
-rw-r--r--plpprint/plpprintd.cc167
1 files changed, 87 insertions, 80 deletions
diff --git a/plpprint/plpprintd.cc b/plpprint/plpprintd.cc
index 6deaab6..e68525a 100644
--- a/plpprint/plpprintd.cc
+++ b/plpprint/plpprintd.cc
@@ -783,11 +783,12 @@ const
static void
service_loop()
{
- serviceLoop = true;
- while (serviceLoop) {
+ bool jobLoop = true;
+ while (jobLoop) {
bool spoolOpen = false;
bool pageStart = true;
bool cancelled = false;
+ bool jobEnd;
unsigned long plen;
int pageCount;
bufferStore buf;
@@ -799,96 +800,102 @@ service_loop()
(char *)malloc(strlen(spooldir) +
strlen(TEMPLATE) + 2);
- while (1) {
+ while (jobLoop) {
/* Job loop */
buf.init();
- if (wPrt->getData(buf) == rfsv::E_PSI_GEN_NONE) {
- if ((buf.getLen() == 15) &&
- (!memcmp(buf.getString(0), fakePage, 15))) {
- cancelled = false;
- if (spoolOpen) {
- fclose(f);
- infolog("Cancelled job %s", jname);
- unlink(jname);
- break;
+ switch (wPrt->getData(buf)) {
+ case rfsv::E_PSI_FILE_DISC:
+ jobLoop = false;
+ break;
+ case rfsv::E_PSI_GEN_NONE:
+ if ((buf.getLen() == 15) &&
+ (!memcmp(buf.getString(0), fakePage, 15))) {
+ cancelled = false;
+ if (spoolOpen) {
+ fclose(f);
+ infolog("Cancelled job %s", jname);
+ unlink(jname);
+ break;
+ }
+ continue;
}
- continue;
- }
- if (!spoolOpen && !cancelled) {
- sprintf(jname, "%s/%s", spooldir, TEMPLATE);
- if ((fd = mkstemp(jname)) != -1) {
- infolog("Receiving new job %s", jname);
- spoolOpen = true;
- pageStart = true;
- pageCount = 0;
- } else {
- errorlog("Could not create spool file.");
+ if (!spoolOpen && !cancelled) {
+ sprintf(jname, "%s/%s", spooldir, TEMPLATE);
+ if ((fd = mkstemp(jname)) != -1) {
+ infolog("Receiving new job %s", jname);
+ spoolOpen = true;
+ pageStart = true;
+ pageCount = 0;
+ } else {
+ errorlog("Could not create spool file.");
+ cancelled = true;
+ wPrt->cancelJob();
+ }
+ f = fdopen(fd, "w");
+ plen = 0;
+ }
+ b = buf.getByte(0);
+ if ((b != 0x2a) && (b != 0xff)) {
+ errorlog("Invalid packet type 0x%02x.", b);
cancelled = true;
wPrt->cancelJob();
}
- f = fdopen(fd, "w");
- plen = 0;
- }
- b = buf.getByte(0);
- if ((b != 0x2a) && (b != 0xff)) {
- errorlog("Invalid packet type 0x%02x.", b);
- cancelled = true;
- wPrt->cancelJob();
- }
- bool jobEnd = (b == 0xff);
- if (!cancelled) {
- buf.discardFirstBytes(1);
- if (pageStart) {
- b = buf.getByte(0);
- plen = buf.getDWord(1) - 8;
- buf.discardFirstBytes(5+8);
- pageStart = false;
- pageBuf.init();
- }
- pageBuf.addBuff(buf);
- plen -= buf.getLen();
- if (plen <= 0) {
- convertPage(f, pageCount++, jobEnd, pageBuf);
- pageBuf.init();
- pageStart = true;
- }
- }
- if (jobEnd) {
- if (spoolOpen)
- fclose(f);
+ jobEnd = (b == 0xff);
if (!cancelled) {
- if (pageCount > 0) {
- if (!printcmd)
- infolog("Output stored in %s", jname);
- else {
- int r;
- char cbuf[4096];
+ buf.discardFirstBytes(1);
+ if (pageStart) {
+ b = buf.getByte(0);
+ plen = buf.getDWord(1) - 8;
+ buf.discardFirstBytes(5+8);
+ pageStart = false;
+ pageBuf.init();
+ }
+ pageBuf.addBuff(buf);
+ plen -= buf.getLen();
+ if (plen <= 0) {
+ convertPage(f, pageCount++, jobEnd, pageBuf);
+ pageBuf.init();
+ pageStart = true;
+ }
+ }
+ if (jobEnd) {
+ if (spoolOpen)
+ fclose(f);
+ if (!cancelled) {
+ if (pageCount > 0) {
+ if (!printcmd)
+ infolog("Output stored in %s", jname);
+ else {
+ int r;
+ char cbuf[4096];
- infolog("Spooling %d pages", pageCount);
- FILE *pipe = popen(printcmd, "w");
- if (!pipe) {
- errorlog("Could not execute %s: %m",
- printcmd);
- unlink(jname);
- }
- f = fopen(jname, "r");
- if (!f) {
- errorlog("Could not read %s: %m",
- jname);
+ infolog("Spooling %d pages", pageCount);
+ FILE *pipe = popen(printcmd, "w");
+ if (!pipe) {
+ errorlog("Could not execute %s: %m",
+ printcmd);
+ unlink(jname);
+ }
+ f = fopen(jname, "r");
+ if (!f) {
+ errorlog("Could not read %s: %m",
+ jname);
+ pclose(pipe);
+ unlink(jname);
+ }
+ while ((r = fread(cbuf, 1,
+ sizeof(cbuf), f)) > 0)
+ fwrite(cbuf, 1, r, pipe);
pclose(pipe);
+ fclose(f);
unlink(jname);
}
- while ((r = fread(cbuf, 1, sizeof(cbuf), f)) > 0)
- fwrite(cbuf, 1, r, pipe);
- pclose(pipe);
- fclose(f);
- unlink(jname);
}
- }
- } else
- unlink(jname);
- spoolOpen = false;
- }
+ } else
+ unlink(jname);
+ spoolOpen = false;
+ }
+ break;
}
}
free(jname);