Discussion:
INMOS C compiler Version 2.01.10 pitfall
(too old to reply)
Mike B.
2023-02-06 22:58:46 UTC
Permalink
Hi!

I like to reuse the arguments of a C function passed by value. Why waste space. BUT - don't do that with the function arguments for a process!

#include <process.h>
#include <stdlib.h>
#include <stdio.h>

void newproc( Process *p, int arg1, int arg2, int arg3 ) {
p = p;
printf( "arg1=%d, arg2=%d, arg3=%d\n", arg1, arg2, arg3 );
arg3--;
arg2++; /* don't change process arguments even they were passed by value !!! */
}

int main( void ) {

Process *x;
int pa1 = 1, pa2 = 2, pa3 = 3;

if (( x = ProcAlloc( newproc, 0, 3, pa1, pa2, pa3 )) == NULL ) abort();

ProcPar( x, NULL );
ProcPar( x, NULL );
ProcPar( x, NULL );

return 0;
}

***@kria:~$ $ISERVER -sb proc.btl
arg1=1, arg2=2, arg3=3
arg1=1, arg2=3, arg3=2
arg1=1, arg2=4, arg3=1

-Mike
cpm
2023-02-07 21:16:46 UTC
Permalink
Hi Mike,

I agree that ProcAlloc and ProcPar may not be what a C programmer would expect.
ProcAlloc allocates and initializes the process according to the documentation. The function creates the process structure and sets the initial values.
ProcPar runs the process. In your case, you ran it three times in sequence without re-initializing.
The result we see seems reasonable.
If you want to reuse the process, you can reinitialize it with ProcInit.

Claus

Loading...