Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-05-13 Thread Mattia Rizzolo
Hey!

On Tue, Apr 30, 2019 at 08:18:25PM +1000, Stewart Smith wrote:
> Have I sneakily tried to make you maintainer yet? :) one day somebody
> will fall for it :)

You already tried a couple of times.  I'm already weary of it ;)

> Quick look at the patch looks sane, I’ll do the merge things when home
> and in front of the laptop with the right github credentials to do so.

Did you have a chance to look at the various patches around (remember,
also the ones in the 2 launchpad MRs against the bzr tree, not just
this one)?  :)

-- 
regards,
Mattia Rizzolo

GPG Key: 66AE 2B4A FCCF 3F52 DA18  4D18 4B04 3FCD B944 4540  .''`.
more about me:  https://mapreri.org : :'  :
Launchpad user: https://launchpad.net/~mapreri  `. `'`
Debian QA page: https://qa.debian.org/developer.php?login=mattia  `-


signature.asc
Description: PGP signature


Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-04-30 Thread Stewart Smith
Hi!

Have I sneakily tried to make you maintainer yet? :) one day somebody will fall 
for it :)

Quick look at the patch looks sane, I’ll do the merge things when home and in 
front of the laptop with the right github credentials to do so.

Sent from my iPhone

> On 29 Apr 2019, at 04:25, Alberto Bertogli  wrote:
> 
>> On Sun, Apr 28, 2019 at 11:25:22AM +0200, Mattia Rizzolo wrote:
>>> On Mon, Jan 28, 2019 at 05:07:34PM +, Alberto Bertogli wrote:
>>> As far as I can see, this is caused by a bug/race in libeatmydata's
>>> initialization, as described before.
>>> 
>>> It is not a problem in libfiu, or its tests.
>>> 
>>> 
>>> The attached patch for libeatmydata fixes the issue, but it's mostly for
>>> illustration since I don't know how the maintainers would prefer to fix
>>> this, and I have not tested it thoroughly (for example there's a chance of
>>> infinite recursion in some very odd conditions, but it might be better to
>>> leave it on purpose to ease debuggability).
>> 
>> I fail to see those, could you maybe expand on where you think there
>> could be infinite recursions?
> 
> Looking at this again, and digging around my git repository, I think I wrote 
> this note based on a previous iteration of the patch.
> 
> I think the patch in your email fixes the problems I was originally worried 
> about, and can't find any infinite recursion paths right now.
> 
> Sorry for the confusion!
> 
> Thanks!
>Alberto
> 



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-04-28 Thread Alberto Bertogli

On Sun, Apr 28, 2019 at 11:25:22AM +0200, Mattia Rizzolo wrote:

On Mon, Jan 28, 2019 at 05:07:34PM +, Alberto Bertogli wrote:

As far as I can see, this is caused by a bug/race in libeatmydata's
initialization, as described before.

It is not a problem in libfiu, or its tests.


The attached patch for libeatmydata fixes the issue, but it's mostly for
illustration since I don't know how the maintainers would prefer to fix
this, and I have not tested it thoroughly (for example there's a chance of
infinite recursion in some very odd conditions, but it might be better to
leave it on purpose to ease debuggability).


I fail to see those, could you maybe expand on where you think there
could be infinite recursions?


Looking at this again, and digging around my git repository, I think I 
wrote this note based on a previous iteration of the patch.


I think the patch in your email fixes the problems I was originally 
worried about, and can't find any infinite recursion paths right now.


Sorry for the confusion!

Thanks!
Alberto



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-04-28 Thread Mattia Rizzolo
Hi Stewart,

It has been a while :)

It seems that libeatmydata has some problems with multi-threading, that
I think were known to potentially arise, and it seems they now did.

Alberto (CCed) wrote a patch that looks mostly sane to me that ought to
be able to fix this issue; do you think you could merge it upstream?

On Mon, Jan 28, 2019 at 05:07:34PM +, Alberto Bertogli wrote:
> As far as I can see, this is caused by a bug/race in libeatmydata's
> initialization, as described before.
> 
> It is not a problem in libfiu, or its tests.
> 
> 
> The attached patch for libeatmydata fixes the issue, but it's mostly for
> illustration since I don't know how the maintainers would prefer to fix
> this, and I have not tested it thoroughly (for example there's a chance of
> infinite recursion in some very odd conditions, but it might be better to
> leave it on purpose to ease debuggability).

I fail to see those, could you maybe expand on where you think there
could be infinite recursions?

> https://blitiri.com.ar/tmp/eatmydata-safe-init.patch

I'm also attaching it to this email for Stewart's benefit.


Stewart: [OT] I see that
https://bugs.launchpad.net/libeatmydata/+bug/1556410 is also still open,
could you please merge that?  (I noticed that you moved to git, so maybe
you could manually pull that patch in, and close the MR?).

-- 
regards,
Mattia Rizzolo

GPG Key: 66AE 2B4A FCCF 3F52 DA18  4D18 4B04 3FCD B944 4540  .''`.
more about me:  https://mapreri.org : :'  :
Launchpad user: https://launchpad.net/~mapreri  `. `'`
Debian QA page: https://qa.debian.org/developer.php?login=mattia  `-
From 72a074fde1b722a3e784a3648a34cd58c3196598 Mon Sep 17 00:00:00 2001
From: Alberto Bertogli 
Date: Mon, 28 Jan 2019 15:39:31 +
Subject: [PATCH] Make initialization thread-safe, and support early callers

The current initialization code is not thread-safe, and assumes that the
only possible caller of open() before initialization completes is
dlsym(), which is not the case if there are other preloaded libraries.

This patch makes the initialization thread-safe by using thread-local
variables, and adjusts the recursive checking logic to support early
callers.

See Debian bug #918520 for more background:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=918520
---
 configure.ac|  2 +
 libeatmydata/libeatmydata.c | 39 ++-
 m4/ax_tls.m4| 74 +
 3 files changed, 98 insertions(+), 17 deletions(-)
 create mode 100644 m4/ax_tls.m4

diff --git a/configure.ac b/configure.ac
index 7343e0a..140387a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -51,6 +51,8 @@ AC_CHECK_DECLS(sync_file_range)
 AC_CHECK_FUNCS(sync_file_range)
 AC_CHECK_FUNCS(open64)
 
+AX_TLS(:,:)
+
 AC_CONFIG_FILES(Makefile libeatmydata.spec)
 
 AC_OUTPUT
diff --git a/libeatmydata/libeatmydata.c b/libeatmydata/libeatmydata.c
index 991146b..b54a98b 100644
--- a/libeatmydata/libeatmydata.c
+++ b/libeatmydata/libeatmydata.c
@@ -50,19 +50,23 @@ typedef int (*libc_sync_file_range_t)(int, off64_t, off64_t, unsigned int);
 typedef int (*libc_fcntl_t)(int, int, ...);
 #endif
 
-static libc_open_t libc_open= NULL;
+/* All the following are thread-local, to avoid initialization races between
+ * threads. */
+static TLS int init_running = 0;
+static TLS int init_complete = 0;
+static TLS libc_open_t libc_open= NULL;
 #ifdef HAVE_OPEN64
-static libc_open64_t libc_open64= NULL;
+static TLS libc_open64_t libc_open64= NULL;
 #endif
-static libc_fsync_t libc_fsync= NULL;
-static libc_sync_t libc_sync= NULL;
-static libc_fdatasync_t libc_fdatasync= NULL;
-static libc_msync_t libc_msync= NULL;
+static TLS libc_fsync_t libc_fsync= NULL;
+static TLS libc_sync_t libc_sync= NULL;
+static TLS libc_fdatasync_t libc_fdatasync= NULL;
+static TLS libc_msync_t libc_msync= NULL;
 #ifdef HAVE_SYNC_FILE_RANGE
-static libc_sync_file_range_t libc_sync_file_range= NULL;
+static TLS libc_sync_file_range_t libc_sync_file_range= NULL;
 #endif
 #if defined(F_FULLFSYNC) && defined(__APPLE__)
-static libc_fcntl_t libc_fcntl= NULL;
+static TLS libc_fcntl_t libc_fcntl= NULL;
 #endif
 
 #define ASSIGN_DLSYM_OR_DIE(name)			\
@@ -87,7 +91,7 @@ void __attribute__ ((constructor)) eatmydata_init(void);
 
 void __attribute__ ((constructor)) eatmydata_init(void)
 {
-	initing = 1;
+	init_running++;
 	ASSIGN_DLSYM_OR_DIE(open);
 #ifdef HAVE_OPEN64
 	ASSIGN_DLSYM_OR_DIE(open64);
@@ -102,13 +106,14 @@ void __attribute__ ((constructor)) eatmydata_init(void)
 #if defined(F_FULLFSYNC) && defined(__APPLE__)
 	ASSIGN_DLSYM_OR_DIE(fcntl);
 #endif
-	initing = 0;
+	init_running--;
+	init_complete++;
 }
 
 static int eatmydata_is_hungry(void)
 {
 	/* Init here, as it is called before any libc functions */
-	if(!libc_open)
+	if(!init_complete)
 		eatmydata_init();
 
 #ifdef CHECK_FILE
@@ -164,9 +169,9 @@ int LIBEATMYDATA_API open(const char* pathname, int flags, ...)
 #endif
 	

Bug#918520: Lack of thread safety (in eatmydata_init?) causes non-deterministic behaviour (was: "Re: Bug#918520: libfiu: FTBFS randomly when built with eatmydata")

2019-02-03 Thread Chris Lamb
retitle 918520 Lack of thread safety (in eatmydata_init?) causes 
non-deterministic behaviour
affects 918520 + libfiu
thanks

Hi Santiago,

> > Any further thoughts folks?
> 
> Based on everything Alberto said, should this bug not be reassigned to 
> eatmydata?

That's probably right. Doing so now.


Best wishes,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org  chris-lamb.co.uk
   `-



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-02-03 Thread Santiago Vila
On Sun, Feb 03, 2019 at 08:50:48AM +0100, Chris Lamb wrote:
> Chris Lamb wrote:
> 
> > > I'll dig in a bit more and see if I can fix libeatmydata, but it might 
> > > end up being too invasive and time consuming.  I'll send another message 
> > > once I know more.
> > 
> > Oh, nice analysis so far. Sounds like that needs to get (at least
> > copied...) upstream at the very least so that it doesn't
> > accidentally lost in this "branch" bug report.
> > 
> > (Probably has implications for other packages that Santiago is
> > testing too, naturally…)
> 
> Any further thoughts folks? :)

Based on everything Alberto said, should this bug not be reassigned to 
eatmydata?

Thanks.



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-02-02 Thread Chris Lamb
Chris Lamb wrote:

> > I'll dig in a bit more and see if I can fix libeatmydata, but it might 
> > end up being too invasive and time consuming.  I'll send another message 
> > once I know more.
> 
> Oh, nice analysis so far. Sounds like that needs to get (at least
> copied...) upstream at the very least so that it doesn't
> accidentally lost in this "branch" bug report.
> 
> (Probably has implications for other packages that Santiago is
> testing too, naturally…)

Any further thoughts folks? :)


Best wishes,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org  chris-lamb.co.uk
   `-



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-01-28 Thread Chris Lamb
Hi Alberto,

> I'll dig in a bit more and see if I can fix libeatmydata, but it might 
> end up being too invasive and time consuming.  I'll send another message 
> once I know more.

Oh, nice analysis so far. Sounds like that needs to get (at least
copied...) upstream at the very least so that it doesn't
accidentally lost in this "branch" bug report.

(Probably has implications for other packages that Santiago is
testing too, naturally…)


Best wishes,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org  chris-lamb.co.uk
   `-



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-01-28 Thread Alberto Bertogli

On Mon, Jan 28, 2019 at 03:13:46PM +, Alberto Bertogli wrote:
I'll dig in a bit more and see if I can fix libeatmydata, but it might 
end up being too invasive and time consuming.  I'll send another 
message once I know more.


As far as I can see, this is caused by a bug/race in libeatmydata's 
initialization, as described before.


It is not a problem in libfiu, or its tests.


The attached patch for libeatmydata fixes the issue, but it's mostly for 
illustration since I don't know how the maintainers would prefer to fix 
this, and I have not tested it thoroughly (for example there's a chance 
of infinite recursion in some very odd conditions, but it might be 
better to leave it on purpose to ease debuggability).


https://blitiri.com.ar/tmp/eatmydata-safe-init.patch


Thanks!
Alberto

>From 72a074fde1b722a3e784a3648a34cd58c3196598 Mon Sep 17 00:00:00 2001
From: Alberto Bertogli 
Date: Mon, 28 Jan 2019 15:39:31 +
Subject: [PATCH] Make initialization thread-safe, and support early callers

The current initialization code is not thread-safe, and assumes that the
only possible caller of open() before initialization completes is
dlsym(), which is not the case if there are other preloaded libraries.

This patch makes the initialization thread-safe by using thread-local
variables, and adjusts the recursive checking logic to support early
callers.

See Debian bug #918520 for more background:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=918520
---
 configure.ac|  2 +
 libeatmydata/libeatmydata.c | 39 ++-
 m4/ax_tls.m4| 74 +
 3 files changed, 98 insertions(+), 17 deletions(-)
 create mode 100644 m4/ax_tls.m4

diff --git a/configure.ac b/configure.ac
index 7343e0a..140387a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -51,6 +51,8 @@ AC_CHECK_DECLS(sync_file_range)
 AC_CHECK_FUNCS(sync_file_range)
 AC_CHECK_FUNCS(open64)
 
+AX_TLS(:,:)
+
 AC_CONFIG_FILES(Makefile libeatmydata.spec)
 
 AC_OUTPUT
diff --git a/libeatmydata/libeatmydata.c b/libeatmydata/libeatmydata.c
index 991146b..b54a98b 100644
--- a/libeatmydata/libeatmydata.c
+++ b/libeatmydata/libeatmydata.c
@@ -50,19 +50,23 @@ typedef int (*libc_sync_file_range_t)(int, off64_t, off64_t, unsigned int);
 typedef int (*libc_fcntl_t)(int, int, ...);
 #endif
 
-static libc_open_t libc_open= NULL;
+/* All the following are thread-local, to avoid initialization races between
+ * threads. */
+static TLS int init_running = 0;
+static TLS int init_complete = 0;
+static TLS libc_open_t libc_open= NULL;
 #ifdef HAVE_OPEN64
-static libc_open64_t libc_open64= NULL;
+static TLS libc_open64_t libc_open64= NULL;
 #endif
-static libc_fsync_t libc_fsync= NULL;
-static libc_sync_t libc_sync= NULL;
-static libc_fdatasync_t libc_fdatasync= NULL;
-static libc_msync_t libc_msync= NULL;
+static TLS libc_fsync_t libc_fsync= NULL;
+static TLS libc_sync_t libc_sync= NULL;
+static TLS libc_fdatasync_t libc_fdatasync= NULL;
+static TLS libc_msync_t libc_msync= NULL;
 #ifdef HAVE_SYNC_FILE_RANGE
-static libc_sync_file_range_t libc_sync_file_range= NULL;
+static TLS libc_sync_file_range_t libc_sync_file_range= NULL;
 #endif
 #if defined(F_FULLFSYNC) && defined(__APPLE__)
-static libc_fcntl_t libc_fcntl= NULL;
+static TLS libc_fcntl_t libc_fcntl= NULL;
 #endif
 
 #define ASSIGN_DLSYM_OR_DIE(name)			\
@@ -87,7 +91,7 @@ void __attribute__ ((constructor)) eatmydata_init(void);
 
 void __attribute__ ((constructor)) eatmydata_init(void)
 {
-	initing = 1;
+	init_running++;
 	ASSIGN_DLSYM_OR_DIE(open);
 #ifdef HAVE_OPEN64
 	ASSIGN_DLSYM_OR_DIE(open64);
@@ -102,13 +106,14 @@ void __attribute__ ((constructor)) eatmydata_init(void)
 #if defined(F_FULLFSYNC) && defined(__APPLE__)
 	ASSIGN_DLSYM_OR_DIE(fcntl);
 #endif
-	initing = 0;
+	init_running--;
+	init_complete++;
 }
 
 static int eatmydata_is_hungry(void)
 {
 	/* Init here, as it is called before any libc functions */
-	if(!libc_open)
+	if(!init_complete)
 		eatmydata_init();
 
 #ifdef CHECK_FILE
@@ -164,9 +169,9 @@ int LIBEATMYDATA_API open(const char* pathname, int flags, ...)
 #endif
 	va_end(ap);
 
-	/* In pthread environments the dlsym() may call our open(). */
-	/* We simply ignore it because libc is already loaded   */
-	if (initing) {
+	/* If we get called recursively during initialization (which should
+	 * be rare but might happen), just fail. */
+	if (init_running > 0) {
 		errno = EFAULT;
 		return -1;
 	}
@@ -191,9 +196,9 @@ int LIBEATMYDATA_API open64(const char* pathname, int flags, ...)
 #endif
 	va_end(ap);
 
-	/* In pthread environments the dlsym() may call our open(). */
-	/* We simply ignore it because libc is already loaded   */
-	if (initing) {
+	/* If we get called recursively during initialization (which should
+	 * be rare but might happen), just fail. */
+	if (init_running > 0) {
 		errno = EFAULT;
 		return -1;
 	}
diff --git a/m4/ax_tls.m4 b/m4/ax_tls.m4
new file mode 100644
index 000..51edee8

Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-01-28 Thread Alberto Bertogli

On Tue, Jan 22, 2019 at 11:17:41AM +, Chris Lamb wrote:

Hi Alberto,


> It could be a couple of weeks before I get time to do this though, as
> I'm away on holidays


No problem; have you managed to get anywhere? :)


I've been looking at this today.

There are some bugs and races in libeatmydata wrt. early initialization 
and threading that I think are the root cause.


If libeatmydata's open() wrapper gets called while libeatmydata's 
constructor is running, it assumes it's because a recursive call in 
dlsym() and makes open() return EFAULT:

https://git.launchpad.net/libeatmydata/tree/libeatmydata/libeatmydata.c#n167

This has a few problems: 1) the check for "is the constructor 
running" is not thread safe; and 2) the assumption about dlsym() is 
wrong.



In the libfiu tests that are failing, it is libfiu's initialization that 
calls open(), not dlsym(), hitting the problem #2 (and also possibly #1).


So libfiu calls open() -> libmetadats's open() -> return EFAULT.
This causes libfiu's initialization fail, and in turn causes the test to 
fail/hang.



I believe this is not happening in the exact same spot all the time 
because the libfiu test triggering this issue is multi-process and 
multi-thread, so depending on the kernel scheduling decisions, which 
thread calls libeatmydata's constructor can change.


In addition, as the check in libeatmydata is also not thread safe, it 
probably adds to the noise and unpredictability.



I'll dig in a bit more and see if I can fix libeatmydata, but it might 
end up being too invasive and time consuming.  I'll send another message 
once I know more.


Thanks!
Alberto



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-01-22 Thread Chris Lamb
Hi Alberto,

> > It could be a couple of weeks before I get time to do this though, as 
> > I'm away on holidays

No problem; have you managed to get anywhere? :)


Best wishes,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org  chris-lamb.co.uk
   `-



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-01-08 Thread Alberto Bertogli

On Mon, Jan 07, 2019 at 08:02:12PM +, Alberto Bertogli wrote:
I'll follow up on the ssh offer separately and post my findings later. 
It could be a couple of weeks before I get time to do this though, as 
I'm away on holidays and this seems to be low priority.


FYI thanks to Santiago's kind offer of access to the failing 
environment, I could investigate and then reproduce this issue locally.


Indeed a single test is hanging when ran wrapped with eatmydata.

That test uses some tricky combination with pipes and early 
initialization and I suspect there is some race which eatmydata brings 
up to light, even though there is no sync going on, but it's too early 
to tell for sure.


I'll continue to investigate and will let you know once I have a better 
understanding of what's going on, and a fix.


Thanks,
Alberto



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-01-07 Thread Alberto Bertogli

On Sun, Jan 06, 2019 at 11:26:01PM +0100, Chris Lamb wrote:

[Adding albert...@blitiri.com.ar to CC]

Dear Santiago,


It is a "just in case". The offer to ssh into my machine is a blurb
which I now add to all my bug reports when the problem is "weird",
for example, when it does not seem to happen in buildd.debian.org or
reproducible-builds.


Awesome -- I just checking as it is somewhat unusual to receive
that offer and I was just 100% confirming before I potenaily spent
cycles on this and I was missing something..

I'm tempted to think that upstream (CC'd) might have an idea at this
stage...? :)


I don't!

libfiu doesn't particularly care for data persistency, there's not a 
single sync/fsync/etc. call.


But it could be a tight race in the build rules that eatmydata makes it 
more prone to manifest.


I'll follow up on the ssh offer separately and post my findings later. 
It could be a couple of weeks before I get time to do this though, as 
I'm away on holidays and this seems to be low priority.


Thanks!
Alberto



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-01-06 Thread Chris Lamb
[Adding albert...@blitiri.com.ar to CC]

Dear Santiago,

> It is a "just in case". The offer to ssh into my machine is a blurb
> which I now add to all my bug reports when the problem is "weird",
> for example, when it does not seem to happen in buildd.debian.org or
> reproducible-builds.

Awesome -- I just checking as it is somewhat unusual to receive
that offer and I was just 100% confirming before I potenaily spent
cycles on this and I was missing something..

I'm tempted to think that upstream (CC'd) might have an idea at this
stage...? :)

> [..] sometimes the maintainer decides to never ssh to the machine,
> downgrade the bug, and keep saying it only happens to me, even when I
> can reproduce it in more than 20 different machines, the bug has also
> been found by other people doing QA, and there is not even a
> successful build log in buildd.debian.org. Amazing, isn't it?

Unfortunately this sort of unnecessary addition is not very
motivating. Sorry.


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-01-06 Thread Santiago Vila
On Sun, Jan 06, 2019 at 10:54:13PM +0100, Chris Lamb wrote:
> Hi Santiago,
> 
> > [ I can offer a machine for you to ssh into it and reproduce this if you
> >   need it, please contact me privately for details ].
> 
> Just out of interest, is there a good reason why I might not be
> able to reproduce this locally, or is this a "just in case"?

It is a "just in case". The offer to ssh into my machine is a blurb
which I now add to all my bug reports when the problem is "weird",
for example, when it does not seem to happen in buildd.debian.org or
reproducible-builds.

Sometimes this has the desired effect and the bug is fixed in record
time (see the great job of Cyril Brulebois with the clojure packages),
and sometimes the maintainer decides to never ssh to the machine,
downgrade the bug, and keep saying it only happens to me, even when I
can reproduce it in more than 20 different machines, the bug has also
been found by other people doing QA, and there is not even a
successful build log in buildd.debian.org. Amazing, isn't it?

Thanks.



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-01-06 Thread Chris Lamb
Hi Santiago,

> [ I can offer a machine for you to ssh into it and reproduce this if you
>   need it, please contact me privately for details ].

Just out of interest, is there a good reason why I might not be
able to reproduce this locally, or is this a "just in case"?


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-



Bug#918520: libfiu: FTBFS randomly when built with eatmydata

2019-01-06 Thread Santiago Vila
Package: src:libfiu
Version: 0.98-1
Tags: ftbfs

Hello Chris.

I'm getting random build failures for this package:


[...]
 debian/rules build-arch
dh build-arch --with python3,python2
   dh_update_autotools_config -a
   dh_autoreconf -a
   dh_auto_configure -a
   debian/rules override_dh_auto_build
make[1]: Entering directory '/<>'
rst2html doc/posix.rst > doc/posix.html
rst2html doc/guide.rst > doc/guide.html
rst2html doc/remote_control.rst > doc/remote_control.html
dh_auto_build -- V=1
make -j2 "INSTALL=install --strip-program=true" V=1
make[2]: Entering directory '/<>'
make -C libfiu

[... snipped ...]

cc -I../../libfiu/ -L../../libfiu/ -L./ -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -fPIC 
-DFIU_ENABLE=1 -g -O2 -fdebug-prefix-map=/<>=. 
-fstack-protector-strong -Wformat -Werror=format-security -std=c99 -pedantic 
-Wall -std=c99 -pedantic -Wall -L. binary.c -lfiu -lcoltest -o binary
LD_LIBRARY_PATH="./:../../libfiu/" ./binary
make[4]: Leaving directory '/<>/tests/collisions'
cc -I../../libfiu/ -L../../libfiu/ -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -fPIC 
-DFIU_ENABLE=1 -g -O2 -fdebug-prefix-map=/<>=. 
-fstack-protector-strong -Wformat -Werror=format-security -std=c99 -pedantic 
-Wall -std=c99 -pedantic -Wall tests/fread.c -lfiu -o tests/fread.bin
ln -f ../preload/posix/fiu_posix_preload.so libs/
ln -f ../preload/run/fiu_run_preload.so libs/
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/strdup.bin
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/fprintf.bin
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/kill.bin
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/open.bin
cc -I../libfiu/ -L../libfiu/ -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -fPIC 
-DFIU_ENABLE=1 -g -O2 -fdebug-prefix-map=/<>=. 
-fstack-protector-strong -Wformat -Werror=format-security -std=c99 -pedantic 
-Wall test-parallel-wildcard.c -lfiu -lpthread -o test-parallel-wildcard
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/pread.bin
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/malloc.bin
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/open64.bin
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/mmap.bin
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/pread64.bin
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/fopen.bin
LD_LIBRARY_PATH=../../libfiu/ LD_PRELOAD="../../preload/run/fiu_run_preload.so 
../../preload/posix/fiu_posix_preload.so" ./tests/fread.bin
rm tests/open.bin tests/fread.bin tests/open64.bin tests/strdup.bin 
tests/pread.bin tests/pread64.bin tests/malloc.bin tests/mmap.bin 
tests/fprintf.bin tests/kill.bin tests/fopen.bin
make[4]: Leaving directory '/<>/tests/generated'
cc -I../libfiu/ -L../libfiu/ -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -fPIC 
-DFIU_ENABLE=1 -g -O2 -fdebug-prefix-map=/<>=. 
-fstack-protector-strong -Wformat -Werror=format-security -std=c99 -pedantic 
-Wall \
-rdynamic -fno-optimize-sibling-calls test-enable_stack.c -lfiu 
-lpthread -o test-enable_stack
test-enable_stack.c: In function 'main':
test-enable_stack.c:32:43: warning: ISO C forbids conversion of function 
pointer to object pointer type [-Wpedantic]
  r = fiu_enable_stack("fp-1", 1, NULL, 0, (void *) , -1);
   ^
cc -I../libfiu/ -L../libfiu/ -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -fPIC 
-DFIU_ENABLE=1 -g -O2 -fdebug-prefix-map=/<>=. 
-fstack-protector-strong -Wformat -Werror=format-security -std=c99 -pedantic 
-Wall \
-rdynamic -fno-optimize-sibling-calls test-enable_stack_by_name.c -lfiu 
-lpthread -o test-enable_stack_by_name
cc -I../libfiu/ -L../libfiu/ -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -fPIC 
-DFIU_ENABLE=1 -g -O2 -fdebug-prefix-map=/<>=. 
-fstack-protector-strong -Wformat -Werror=format-security -std=c99 -pedantic 
-Wall test-parallel.c -lfiu -lpthread -o test-parallel
cc -I../libfiu/ -L../libfiu/ -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -fPIC 
-DFIU_ENABLE=1 -g -O2 -fdebug-prefix-map=/<>=. 
-fstack-protector-strong -Wformat -Werror=format-security -std=c99 -pedantic 
-Wall test-ferror.c -lfiu -lpthread -o test-ferror
LD_LIBRARY_PATH=../libfiu/ 
LD_PRELOAD=./libs/fiu_run_preload.so:./libs/fiu_posix_preload.so