Looks good to me.

Hi Nadav could you review this ?

Best regards

Benoīt



On Wed, Mar 08, 2017 at 08:22:00AM +0100, Justin Cinkelj wrote:
> 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.

-- 
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.

Reply via email to