[fpc-devel]Re: [fpc-pascal]two questions plz help

Thomas.Hergenhahn at nexans.com Thomas.Hergenhahn at nexans.com
Thu Jan 10 14:43:16 CET 2002


I wrote a mutithreaded program using the clone() call. Memory allocation takes place only in the main thread. Preallocated structures like lists are then passed to the child threads.
For I/O, I use the function fdopen, fdwrite, fdread, fdclose from the linux unit. 
This works ok for me.

A week ago I posted the following which contains a remark about thread safe error handling. I append
it here, because I did not get any answers:

>>Hello, developers,
>>a happy new Year to all of You !

>>I use fpc 1.0.4 and I missed the following syscalls:

>>procedure getResUid(var ruid: longint; var euid:longint; var suid:longint);
>>var
>>  regs : SysCallregs;
>>  x: longint;
>>begin
>>{ This was only for verifying that values are really set by system call:}
>>(*
>>    ruid:=44;
>>    euid:=45;
>>    suid:=46;
>>*)    
>>  regs.reg2:=longint(@ruid);
>>  regs.reg3:=longint(@euid);
>>  regs.reg4:=longint(@suid);
>>{  x:=}SysCall(SysCall_nr_getresuid,regs);
>>{  writeln('X: ',x);}
>>  Linuxerror:=errno;
>>end;

>>procedure setResUid(var ruid: longint; var euid:longint; var suid:longint);
>>var
>>  regs : SysCallregs;
>>  x: longint;
>>begin
>>  regs.reg2:=ruid;
>>  regs.reg3:=euid;
>>  regs.reg4:=suid;
>>{  x:=}
>>    SysCall(SysCall_nr_setresuid,regs);
>>{  writeln('X: ',x);}
>>{  
>>  ruid:=regs.reg2;
>>  euid:=regs.reg3;
>>  suid:=regs.reg4;
>>}  
>>  Linuxerror:=errno;
>>end;

>>BTW, why does SysCall store errors in LinuxError? IMHO, it would be nice to make functions of all >>the syscalls and return
>>error numbers as negative values. This would be inherently thread safe, or do I miss a point here?






More information about the fpc-devel mailing list