In our previous episode, Brian said: > I notice the Do_Write() uses repeat .. until where fpWrite() does a direct > call. > > What was the reasoning for the repeat..until in Do_Write() ?
Syscalls that block for hardware can return EINTR (ESysIntr) on some *nixes when a signal arrives while waiting for data. Some *nixes restart the syscall after the signal was delivered, but afaik Linux does not. So the loop is just to restart the syscall if needed. source: Function Do_Write(Handle:thandle;Addr:Pointer;Len:Longint):longint; var j : cint; Begin repeat Do_Write:=Fpwrite(Handle,addr,len); j:=geterrno; until (do_write<>-1) or ((j<>ESysEINTR) and (j<>ESysEAgain)); If Do_Write<0 Then Begin Errno2InOutRes; Do_Write:=0; End else InOutRes:=0; End; see also: https://www.gnu.org/software/libc/manual/html_node/Interrupted-Primitives.html _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal