mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-06-04 14:39:54 +00:00
xmlrpc-c: improve the fix for parallel build a bit
* still needs some improvements, but should work a bit better I've rebuilt it 30 times without triggering the issue now with previous version it failed on 5th iteration already Signed-off-by: Martin Jansa <martin.jansa@gmail.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
+70
-7
@@ -1,23 +1,86 @@
|
|||||||
From c9bd05e8f0ad805b81625cfa717d06071cfd9b48 Mon Sep 17 00:00:00 2001
|
From c9bd05e8f0ad805b81625cfa717d06071cfd9b48 Mon Sep 17 00:00:00 2001
|
||||||
From: Khem Raj <raj.khem@gmail.com>
|
From: Khem Raj <raj.khem@gmail.com>
|
||||||
Date: Wed, 16 Oct 2024 22:52:38 -0700
|
Date: Wed, 16 Oct 2024 22:52:38 -0700
|
||||||
Subject: [PATCH] unix-common.mk: Ensuring Sequential Execution of rm and ln commands
|
Subject: [PATCH] unix-common.mk: Avoid race condition between mutliple make calls running in parallel
|
||||||
|
|
||||||
With high parallel execution, it results in race condition where
|
With high parallel execution, it results in race condition where
|
||||||
its trying to create symlink while the original symlink while rm is
|
its trying to create symlink while the original symlink while rm is
|
||||||
not done deleting the existing file yet.
|
not done deleting the existing file yet.
|
||||||
|
|
||||||
force sequential execution by adding dependencies between the steps
|
The issue is that submake for libxmlrpc_util.so is called 12 times
|
||||||
or combining them into a single shell command
|
which can run in parallel and then some of them will try to create
|
||||||
|
target link at the same time (after both already finished rm call).
|
||||||
|
|
||||||
Here, && ensures that the ln -s command only runs after rm -f target
|
Use -f which should be supported even by relatively old ln and
|
||||||
successfully completes.
|
should avoid the need for rm (and hopefully will avoid this race)
|
||||||
|
|
||||||
|
For libutil++ it calls "all" and "libxmlrpc_util++.so" only once,
|
||||||
|
but for libutil it calls "all" and then 12 times libxmlrpc_util.so
|
||||||
|
(after-clean-j1.log is the make output with -n and -j1 instead of
|
||||||
|
-j70), still trying to figure out why, my autofoo is rusty :).
|
||||||
|
|
||||||
|
Ideally we should prevent calling it 12 times, but until we figure
|
||||||
|
out why we can at least avoid the random build failures.
|
||||||
|
|
||||||
|
Another interesting fact is that I haven't seen this issue until
|
||||||
|
the upgrade to 1.60.03 from 1.59.01 from:
|
||||||
|
https://lists.openembedded.org/g/openembedded-devel/message/112706
|
||||||
|
but I don't see any changes which should cause this in the git since
|
||||||
|
1.59.01, but the gentoo bug report is against 1.54.06 already.
|
||||||
|
|
||||||
|
martin@jama /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable $ grep -A 1 lib/libutil++/Makefile after-clean-j1.log
|
||||||
|
make -C libutil++/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil++/Makefile \
|
||||||
|
all
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil++/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil++/Makefile \
|
||||||
|
libxmlrpc_util++.so
|
||||||
|
|
||||||
|
martin@jama /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable $ grep -A 1 lib/libutil/Makefile after-clean-j1.log
|
||||||
|
make -C libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
all
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
--
|
||||||
|
make -C /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/ -f /OE/build/oe-core/tmp/work/core2-64-oe-linux/xmlrpc-c/1.60.03/git/stable/lib/libutil/Makefile \
|
||||||
|
libxmlrpc_util.so
|
||||||
|
|
||||||
Similar error reported here [1]
|
Similar error reported here [1]
|
||||||
|
|
||||||
[1] https://bugs.gentoo.org/932835
|
[1] https://bugs.gentoo.org/932835
|
||||||
|
|
||||||
Upstream-Status: Pending
|
Upstream-Status: Pending
|
||||||
|
Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
|
||||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||||
---
|
---
|
||||||
unix-common.mk | 6 ++----
|
unix-common.mk | 6 ++----
|
||||||
@@ -33,14 +96,14 @@ index 6954faf5..983c48cd 100644
|
|||||||
$(SHLIB_LE_TARGETS):%:%.$(MAJ)
|
$(SHLIB_LE_TARGETS):%:%.$(MAJ)
|
||||||
- rm -f $@
|
- rm -f $@
|
||||||
- $(LN_S) $< $@
|
- $(LN_S) $< $@
|
||||||
+ rm -f $@ && $(LN_S) $< $@
|
+ $(LN_S) -f $< $@
|
||||||
|
|
||||||
SONAME_TARGETS = $(SHLIB_LE_TARGETS:%=%.$(MAJ))
|
SONAME_TARGETS = $(SHLIB_LE_TARGETS:%=%.$(MAJ))
|
||||||
|
|
||||||
$(SONAME_TARGETS):%:%.$(MIN)
|
$(SONAME_TARGETS):%:%.$(MIN)
|
||||||
- rm -f $@
|
- rm -f $@
|
||||||
- $(LN_S) $< $@
|
- $(LN_S) $< $@
|
||||||
+ rm -f $@ && $(LN_S) $< $@
|
+ $(LN_S) -f $< $@
|
||||||
|
|
||||||
.PHONY: $(SHLIB_INSTALL_TARGETS)
|
.PHONY: $(SHLIB_INSTALL_TARGETS)
|
||||||
.PHONY: install-shared-libraries
|
.PHONY: install-shared-libraries
|
||||||
|
|||||||
Reference in New Issue
Block a user