[SOLVED] Repeated "interrupted system call" on multiple Android devices

I believe that something is simply broken in the OS. Granted, these are custom ROMs, but I have tried several different ones, and the interrupted system call thing is the case in all of them. The last official version of Android for this device is Android 4.1, and there everything seems to work fine, at least as far as filesystem operations go. The problem is that I need to run 1 application, which requires Android 4.4 and later, so I cannot stay on the old Android because of it.

The panics are not that often though. As long as there is not much filesystem activity, Syncthing seems to stay up and running for long time, e.g. 1d 7h 40m right now. Also, as long as Syncthing manages to restart itself after these panics, and there are no file corruptions (and there has been none so far), I will likely just keep using it this way.

This has been a change in the go runtime. Previously it used to hide and retry a bunch of these interrupted calls, it no longer does. You can try to compile yoour own version with an old version of go, but we’re definately not going to use an outdated version of go just to support outdated phone versions.

Really? Which version of Go do you mean specifically? This is Syncthing 1.4.2 compiled with Go 1.13.10.

At the moment, most of the errors seem to be ignored, i.e. they are reported in the log, but the synchronisation just goes on, e.g.

2020-05-17 10:47:04 Scanner (folder xxxxx-xxxxx, item "xxxxx"): scan: readdirent: interrupted system call
2020-05-17 10:47:15 Database indirection GC failed: write /sdcard/.config/syncthing/index-v0.14.0.db/000376.ldb: interrupted system call

Only this one seems to trigger a panic.

panic: read /sdcard/.config/syncthing/index-v0.14.0.db/000321.ldb: interrupted system call

https://golang.org/doc/go1.14#runtime

A consequence of the implementation of preemption is that on Unix systems, including Linux and macOS systems, programs built with Go 1.14 will receive more signals than programs built with earlier releases. This means that programs that use packages like syscall or golang.org/x/sys/unix will see more slow system calls fail with EINTR errors. Those programs will have to handle those errors in some way, most likely looping to try the system call again. For more information about this see man 7 signal for Linux systems or similar documentation for other systems.

1 Like

This topic was automatically closed after 37 days. New replies are no longer allowed.