On 05/23/20 13:13 PM, Adrian Bunk wrote: > On Thu, Mar 12, 2020 at 04:36:17PM +0000, Ivo De Decker wrote: >> package: src:gambc >> version: 4.9.3-1 >> severity: serious >> tags: ftbfs >> >> Hi, >> >> The latest upload of gambc to unstable fails on s390x: >> >> https://buildd.debian.org/status/package.php?p=gambc > > Can an s390x porter please have a look? >
I had a look at this because it's blocking another package, slib. I can reproduce the hanging test case in qemu-user. It's testing timeouts with UDP sockets but there seems to be a bug in the set_socket_blocking_mode function where it passes an unsigned long argument to the FIONBIO ioctl which actually takes an int parameter. unsigned long param = !blocking; return SOCKET_CALL_ERROR(IOCTL_SOCKET(s, FIONBIO, ¶m)); The parameter value is only ever 0 or 1 so it's benign on little-endian LP64 systems but on a big-endian system the parameter is always 0 when read as an int so the socket is never put in non-blocking mode and reads from it hang. The patch below fixes the problem from me on S390 qemu-user. I'm wondering if someone with access to real hardware can verify? diff --git a/lib/os_io.c b/lib/os_io.c index 046be4a6bd30..b8b5f96c191e 100644 --- a/lib/os_io.c +++ b/lib/os_io.c @@ -5458,7 +5458,7 @@ ___BOOL blocking;) #ifdef FIONBIO - unsigned long param = !blocking; + int param = !blocking; return SOCKET_CALL_ERROR(IOCTL_SOCKET(s, FIONBIO, ¶m)); -- Thanks, Nick