Android arm64, version 0.14.19 loses connection and breaks sync

So i thought the problem was related to my Huawei P9 but after upgrading my Nexus to the latest version 0.14.19 the server no longer sees the phone as connected and won’t sync files Syncthing log --------- beginning of main [IJGMW] 21:52:35 INFO: Using discovery server https://discovery-v6-3.syncthing.net/v2/?id=VK6HNJ3-VVMM66S-HRVWSCR-IXEHL2H-U4AQ4MW-UCPQBWX-J2L2UBK-NVZRDQZ [IJGMW] 21:52:35 INFO: Using discovery server https://discovery-v6-4.syncthing.net/v2/?id=LYXKCHX-VI3NYZR-ALCJBHF-WMZYSPK-QG6QJA3-MPFYMSO-U56GTUK-NA2MIAW [IJGMW] 21:52:35 INFO: Device IJGMWG3-DKNW4W4-FQEF7CS-LI53R3F-2Q7W3KX-M5J6PJH-MYAHMVU-QW3EEAQ is “Nexus 6P” at [dynamic] [IJGMW] 21:52:35 INFO: Device xxx is “Home” at [dynamic] [IJGMW] 21:52:35 INFO: No automatic upgrades; STNOUPGRADE environment variable defined. [IJGMW] 21:52:35 INFO: GUI and API listening on xxx [IJGMW] 21:52:35 INFO: Access the GUI via the following URL: https://xxx/ [IJGMW] 21:52:37 INFO: Invalid IGD response: invalid device UUID DSLF_BTBusinessHub3.0A_90013bb0b8a8 (continuing anyway) [IJGMW] 21:52:37 INFO: Invalid IGD response: invalid device UUID DSLF_BTBusinessHub3.0A_90013bb0b8a8 (continuing anyway) [IJGMW] 21:52:37 INFO: Invalid IGD response: invalid device UUID DSLF_BTBusinessHub3.0A_90013bb0b8a8 (continuing anyway) [IJGMW] 21:52:38 INFO: New NAT port mapping: external TCP address xxx to local address 0.0.0.0:22000. [IJGMW] 21:52:39 INFO: Detected 3 NAT devices [IJGMW] 21:52:45 INFO: Joined relay relay://163.172.210.93:22067 [IJGMW] 21:55:50 INFO: Connected to already connected device (xxxx) [IJGMW] 21:56:56 INFO: Connected to already connected device (xxxx) [IJGMW] 21:58:04 INFO: Connected to already connected device (xxxx) [IJGMW] 21:59:19 INFO: Connected to already connected device (xxxx) [IJGMW] 22:00:21 INFO: Connected to already connected device (xxxx) [IJGMW] 22:01:23 INFO: Connected to already connected device (xxxx) [IJGMW] 22:02:11 INFO: Connection to xxxx closed: read timeout [IJGMW] 22:02:20 WARNING: Loading .stignore: open /storage/emulated/0/DCIM/.stignore: interrupted system call [IJGMW] 22:02:25 INFO: Established secure connection to xxxxx at [fe80::aecf:85ff:fe2c:d864%wlan0]:22000-[fe80::3b56:ea15:cb6f:de75%wlan0]:53262 (tcp-server) (TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384) [IJGMW] 22:02:25 INFO: Device xxxxx client is “syncthing v0.14.19” named “jonh-h8-1375ea”

Actually, I doubt its because of 0.14.19, but because this is the first release with AArch64 compilation.

I have the same problem on my Google Pixel and Moto X Style, after upgrading to the newest version: connected but no sync; nothing of value in the logs. Whereas on my Nexus 5, it works correctly. That device has a 32Bit CPU, so it still has the ARM version, not the AArch64 version.

@Nutomic with what device did you test the 64Bit build?

I tested on my LG G4 (Android 7). And I can reproduce this. Syncing from my laptop (x86) to my phone (Arm64), nothing is transfered, and the Android side always shows 0 bytes folder size.

ping @calmh @AudriusButkevicius

I can confirm this problem (Android 6, Glaxy S7). In log the same as Jon’s one. Tried to reinstall app, reboot, rebuild db, change files at both side, recreate dirs, change direct connection to relay… No chance… One side see all files, no files at other side.

In addition to… I can’t share folder from phone to PC, request not appeared, only device connection request. Device connection request, folder share request received by phone without any problem.

The only thing that I can suspect to be to blame is the new rate handling code, yet I won’t be able to test it for a while.

I don’t have rate limits set and all devices are in the same network. Shouldn’t that short circuit the rate limiter, so it isn’t used at all and even if it doesn’t work correctly with AArch64, it shouldn’t matter?

Can someonewho is having the isue set up a rate limit of lets say 10mb on both sides for both send and receive and see if that makes it better?

Well very little changed in the last release all together, so if it anything it’s either the Arm64 stuff or the rate limiting.

Seems like specific to (64 bit?) Android so far?

Yes, it’s only on 64Bit Android. My Nexus 5 uses the ARM binary and has no problems. On 64Bit devices, it uses “Linux (AArch64)” and has the problems.

@AudriusButkevicius you are right. It seems to be the limiter. If I enable limitBandwidthInLan in the advanced settings and set the limit in both directions to 102400 (100MB/s) on the phone, it starts to sync. I didn’t set a limit on the other devices.

Nexus 6P now flawlessly synced in super speed with my pc; rate limit 102400 enabled for both sides. 22 GB in about 4 minutes over a 24 MBit/s wifi connection.

… how can that bug be specific to 64 bit Android? Is there build weirdness going on?

Here’s the commit, only differences to ARMv5 are GOARCH and GOARM.

Is the behavior the same with https://github.com/syncthing/syncthing/releases/download/v0.14.19/syncthing-linux-arm64-v0.14.19.tar.gz from Github? It seems odd that we would have an issue with arm64 but not amd64.

I also don’t have rate settings enabled but if I try to set a limit on the Nexus 6P it crashes the app every time, tried different rates same effect.

That seems to be the opposite problem of everyone else, though.

v0.14.19 “Linux (AMD64)” has no problems like this. I use it on my server and desktop since it was released.

@keep_flying did you try to set the rate limit in the android wrapper or the web ui. As you probably also have to enable the advanced setting, you need to use the web ui anyway.

Yeah. Since AMD64 seems sane, I’m wondering if our ARM64 build is good or bad. If bad, I guess something in the ARM64 build of the rate limiting package is bad. If good, I expect it’s something in the Android build process that breaks it. I think it’s possible to replace the libsyncthing.so file in the app with the Syncthing binary from our download linked above.

Something non-Android ARM64 would be interesting too, I guess.

You need to have root to replace the binary, which I don’t have. No 64Bit ARM device here either (the RPi2 was still 32Bit).