]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdmon: prevent allocations due to late binding
authorDan Williams <dan.j.williams@intel.com>
Fri, 2 Jul 2010 00:28:14 +0000 (17:28 -0700)
committerDan Williams <dan.j.williams@intel.com>
Fri, 2 Jul 2010 00:28:14 +0000 (17:28 -0700)
Current versions of glibc do not provide a useable interface to clone(2) as it
inflicts hidden dependencies on setting up a glibc specific tls
descriptor.  The dynamic linker trips this dependency and causes mdmon
to intermittently fail to load.  Resolving all dynamic linking prior to
starting the monitor thread appears to mitigate the issue but there is no
guarantee that another tls dependency will bite us later.

However, while the debate continues with the glibc maintainers it seems
prudent to keep this change.  It ensures that we do not get into a
situation where the monitor thread needs to make a late allocation to
resolve a symbol.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Makefile

index 3af16650afe1d65a0082b47041aca9812136a29e..237f4fc9cceb679164b2872de93ef7dc1e3fbf4c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -157,8 +157,9 @@ mdadm.O2 : $(SRCS) mdadm.h mdmon.O2
 mdmon.O2 : $(MON_SRCS) mdadm.h mdmon.h
        $(CC) -o mdmon.O2 $(CFLAGS)  -DHAVE_STDINT_H -O2 -D_FORTIFY_SOURCE=2 $(MON_SRCS)
 
+# use '-z now' to guarantee no dynamic linker interactions with the monitor thread
 mdmon : $(MON_OBJS)
-       $(CC) $(LDFLAGS) -o mdmon $(MON_OBJS) $(LDLIBS)
+       $(CC) $(LDFLAGS) -z now -o mdmon $(MON_OBJS) $(LDLIBS)
 msg.o: msg.c msg.h
 
 test_stripe : restripe.c mdadm.h