Before patch, netperf netserver.so and netperf.so could not be run in the same VM. The netserver reports "error starting alarm timer, ret 3 errno 28".
The patch make alarm (and also signals) per namespace specific, in the wat as environ was made per namespace specific in e93af8d3622ba1cf491ba12c780f05bb447de8ac and 1d3645b6c1a119ea34e1a3dca6ae814d4902905f. Signed-off-by: Justin Cinkelj <[email protected]> --- Makefile | 9 ++++++++- core/app.cc | 10 ++++++++++ include/osv/app.hh | 2 ++ usr.manifest.skel | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6846c5e..d982864 100644 --- a/Makefile +++ b/Makefile @@ -926,6 +926,7 @@ libc = musl = environ_libc = environ_musl = +signal_libc = ifeq ($(arch),x64) musl_arch = x86_64 @@ -995,6 +996,8 @@ environ_musl += env/putenv.c environ_musl += env/setenv.c environ_musl += env/unsetenv.c +signal_libc += signal.cc + musl += ctype/__ctype_b_loc.o musl += errno/strerror.o @@ -1830,10 +1833,14 @@ $(out)/bsd/%.o: COMMON += -DSMP -D'__FBSDID(__str__)=extern int __bogus__' environ_sources = $(addprefix libc/, $(environ_libc)) environ_sources += $(addprefix musl/src/, $(environ_musl)) +signal_sources = $(addprefix libc/, $(signal_libc)) $(out)/libenviron.so: $(environ_sources) $(makedir) $(call quiet, $(CC) $(CFLAGS) -shared -o $(out)/libenviron.so $(environ_sources), CC libenviron.so) +$(out)/libsignal.so: $(signal_sources) + $(makedir) + $(call quiet, $(CXX) $(CXXFLAGS) -shared -o $(out)/libsignal.so $(signal_sources), CXX libsignal.so) bootfs_manifest ?= bootfs.manifest.skel @@ -1847,7 +1854,7 @@ $(bootfs_manifest_dep): phony fi $(out)/bootfs.bin: scripts/mkbootfs.py $(bootfs_manifest) $(bootfs_manifest_dep) $(tools:%=$(out)/%) \ - $(out)/zpool.so $(out)/zfs.so $(out)/libenviron.so + $(out)/zpool.so $(out)/zfs.so $(out)/libenviron.so $(out)/libsignal.so $(call quiet, olddir=`pwd`; cd $(out); $$olddir/scripts/mkbootfs.py -o bootfs.bin -d bootfs.bin.d -m $$olddir/$(bootfs_manifest) \ -D jdkbase=$(jdkbase) -D gccbase=$(gccbase) -D \ glibcbase=$(glibcbase) -D miscbase=$(miscbase), MKBOOTFS $@) diff --git a/core/app.cc b/core/app.cc index d623a61..b800522 100644 --- a/core/app.cc +++ b/core/app.cc @@ -161,6 +161,7 @@ application::application(const std::string& command, if (new_program) { this->new_program(); clone_osv_environ(); + clone_osv_signal(); current_program = _program.get(); } else { // Do it in a separate branch because elf::get_program() would not @@ -449,6 +450,15 @@ elf::program *application::program() { } +void application::clone_osv_signal() +{ + _libsignal = _program->get_library("libsignal.so"); + if (!_libsignal) { + abort("could not load libsignal.so\n"); + return; + } +} + void application::clone_osv_environ() { _libenviron = _program->get_library("libenviron.so"); diff --git a/include/osv/app.hh b/include/osv/app.hh index 83e017e..d301551 100644 --- a/include/osv/app.hh +++ b/include/osv/app.hh @@ -185,6 +185,7 @@ public: elf::program *program(); private: void new_program(); + void clone_osv_signal(); void clone_osv_environ(); void set_environ(const std::string &key, const std::string &value, bool new_program); @@ -213,6 +214,7 @@ private: mutex _termination_mutex; std::shared_ptr<elf::object> _lib; std::shared_ptr<elf::object> _libenviron; + std::shared_ptr<elf::object> _libsignal; main_func_t* _main; void (*_entry_point)(); static app_registry apps; diff --git a/usr.manifest.skel b/usr.manifest.skel index 583bdfe..73f58c1 100644 --- a/usr.manifest.skel +++ b/usr.manifest.skel @@ -1,5 +1,6 @@ [manifest] /libenviron.so: libenviron.so +/libsignal.so: libsignal.so /zpool.so: zpool.so /libzfs.so: libzfs.so /libuutil.so: libuutil.so -- 2.9.3 -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
