linux_sendfile issue in 13-p3 whereas 12.1 was working fine.

From: Steve Roome <me_at_stephenroome.com>
Date: Sun, 18 Jul 2021 00:56:38 UTC
Hi,

I've recently upgraded to FreeBSD 13.0-RELEASE-p3 from 12.1

There appears to be a problem with Factorio which is a game from
Linux, FreebSD 12 worked okay.
This does need a different glibc, which I use via patchelf on the
binary I run, I use 2.18 and some other libs, but that was not a
problem in FreeBSD 12 and all worked well for many hours at a time.

Now it appears to fail on a linux_sendfile call with socket operation
on non socket.

This was working a before the upgrade, so it seems that something in
linux_sendfile() has changed in 13 that was working in 12.

There is an error message in the program I am running that says:

Error while running reload_script: filesystem error: copy_file
"/home/steve/factorio/data/base/scenarios/freeplay/control.lua" to
"/home/steve/factorio/temp/currently-playing-background/control.lua"
failed:
Socket operation on non-socket
[/home/steve/factorio/data/base/scenarios/freeplay/control.lua]
[/home/steve/factorio/data/base/currently-playing-background/control.lua]

I have included a truss -f output below that shows what it is doing as
best as I can get at the moment.

Can anyone pinpoint the error and help resolve it please.

many thanks,

Steve Roome

The truss shows:


 4933: linux_time(0x0)                           = 1626569239 (0x60f37a17)
 4933: linux_newstat("/home/steve/factorio/temp/currently-playing-background/locale/en/info.json",0x7fffffff9ee0)
ERR#-2 'No such file or directory'
 4933: linux_newstat("/home/steve/factorio/temp/currently-playing-background/locale/en",0x7fffffff9e80)
ERR#-2 'No such file or directory'
 4933: linux_newstat("/home/steve/factorio/temp/currently-playing-background/campaign-locale/en/info.json",0x7fffffff9ee0)
ERR#-2 'No such file or directory'
 4933: linux_newstat("/home/steve/factorio/temp/currently-playing-background/campaign-locale/en",0x7fffffff9e80)
ERR#-2 'No such file or directory'
 4933: linux_newstat("/home/steve/factorio/temp/currently-playing-background/control.lua",0x7fffffffa0c0)
ERR#-2 'No such file or directory'
 4933: linux_newstat("/home/steve/factorio/data/base/scenarios/freeplay/",0x7fffffffa2d0)
= 0 (0x0)
 4933: linux_newstat("/home/steve/factorio/data/base/scenarios/lualib",0x7fffffffa2d0)
ERR#-2 'No such file or directory'
 4933: linux_newstat("/home/steve/factorio/data/base/scenarios/locale",0x7fffffffa2d0)
ERR#-2 'No such file or directory'
 4933: linux_newstat("/home/steve/factorio/data/base/scenarios/freeplay",0x7fffffff9de0)
= 0 (0x0)
 4933: linux_openat(0xffffffffffffff9c,0x455ae30,0x90800,0x0) = 30 (0x1e)
 4933: linux_getdents(0x1e,0xf550490,0x8000)     = 216 (0xd8)
 4933: linux_newstat("/home/steve/factorio/data/base/scenarios/freeplay/control.lua",0x7fffffff9de0)
= 0 (0x0)
 4933: linux_newlstat(0x4565a80,0x7fffffff9bb0)  = 0 (0x0)
 4933: linux_newstat("/home/steve/factorio/temp/currently-playing-background/control.lua",0x7fffffff9960)
ERR#-2 'No such file or directory'
 4933: linux_newstat("/home/steve/factorio/data/base/scenarios/freeplay/control.lua",0x7fffffff99f0)
= 0 (0x0)
 4933: linux_open("/home/steve/factorio/data/base/scenarios/freeplay/control.lua",0x0,037777714760)
= 31 (0x1f)
 4933: linux_open("/home/steve/factorio/temp/currently-playing-background/control.lua",0x241,0200)
= 32 (0x20)
 4933: fchmod(32,0100644)                        = 0 (0x0)
 4933: linux_sendfile(0x20,0x1f,0x7fffffff9958,0x76) ERR#-88 'Socket
operation on non-socket'