Re: Bug#736202: undeterministic output when running egrep repeatedly with the same input
This is about 100x times harder to reproduce running under ktrace but I
got lucky. The problematic syscall is right here:
> egrep RET read 32768/0x8000
> egrep CALL lseek(0,0,SEEK_CUR)
> egrep RET lseek 32768/0x8000
> egrep CALL lseek(0,0x8000,SEEK_HOLE)
> -egrep RET lseek -1 errno 6 No such device or address
> -egrep CALL fstat(0x1,0x7fffffffd070)
> +egrep RET lseek 32768/0x8000
> +egrep CALL lseek(0,0x8000,SEEK_SET)
> +egrep RET lseek 32768/0x8000
> +egrep CALL fstat(0x1,0x7fffffffca40)
Only if the lseek *fails*, it continues normally, reading from stdin
here and outputting matches to stdout. If the lseek succeds, it aborts
with "Binary file (standard input) matches".
> -egrep CALL read(0,0x636000,0x8000)
> -egrep GIO fd 0 read 1164 bytes
[...]
> -egrep RET read 1164/0x48c
> -egrep CALL read(0,0x63648c,0x7000)
> -egrep GIO fd 0 read 0 bytes
> -""
> -egrep RET read 0
> -egrep CALL write(0x1,0x8007ff000,0x952)
> -egrep GIO fd 1 wrote 2386 bytes
[...]
> +egrep CALL write(0x1,0x8007ff000,0x25)
> +egrep GIO fd 1 wrote 37 bytes
> +"Binary file (standard input) matches
> "
> -egrep RET write 2386/0x952
> +egrep RET write 37/0x25
It exits with zero status either way (indicating there were matches).
Regards,
--
Steven Chamberlain
steven@pyro.eu.org
Reply to: