Do away with the killval hack.
This now uses the same approach to detect a kill as libkrocif.
This commit is contained in:
parent
006559271d
commit
b814e81bec
|
@ -48,6 +48,11 @@ static inline void tock_init_chan_array (Channel *pointTo, Channel **pointFrom,
|
||||||
//}}}
|
//}}}
|
||||||
|
|
||||||
//{{{ top-level process interface
|
//{{{ top-level process interface
|
||||||
|
static void tock_tlp_input_bcall (FILE *in, int *ch) occam_unused;
|
||||||
|
static void tock_tlp_input_bcall (FILE *in, int *ch) {
|
||||||
|
*ch = fgetc (in);
|
||||||
|
}
|
||||||
|
|
||||||
static void tock_tlp_input (Workspace wptr) occam_unused;
|
static void tock_tlp_input (Workspace wptr) occam_unused;
|
||||||
static void tock_tlp_input (Workspace wptr) {
|
static void tock_tlp_input (Workspace wptr) {
|
||||||
Channel *out = ProcGetParam (wptr, 0, Channel *);
|
Channel *out = ProcGetParam (wptr, 0, Channel *);
|
||||||
|
@ -55,16 +60,14 @@ static void tock_tlp_input (Workspace wptr) {
|
||||||
FILE *in = ProcGetParam (wptr, 2, FILE *);
|
FILE *in = ProcGetParam (wptr, 2, FILE *);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
uint8_t ch;
|
int ch = -1;
|
||||||
KillableBlockingCallN (wptr, fread, kill, 4, &ch, sizeof ch, 1, in);
|
KillableBlockingCallN (wptr, tock_tlp_input_bcall, kill, 2, in, &ch);
|
||||||
|
if (ch == -1) {
|
||||||
// Check if the call was killed.
|
// The call was killed -- exit.
|
||||||
// FIXME: This is a hack; it should be a proper CCSP function.
|
|
||||||
const word killval = *kill;
|
|
||||||
if (killval == 1 || killval == 2)
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
ChanOut (wptr, out, &ch, sizeof ch);
|
ChanOutChar (wptr, out, ch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user