In article <58cea448.2050...@eq.cz>, rudolf  <net...@eq.cz> wrote:
>-=-=-=-=-=-
>
>Hi,
>
>I've recently switched from netbsd-6 to netbsd-7 (amd64) and today i 
>found out that the wakeup from the S3 acpi sleep state on my old 
>ThinkPad SL510 finally reliably works (using hw.acpi.sleep.vbios=2). 
>Thanks to everybody responsible!

Great.

>
>One minor problem was the network connection, which presented itself by 
>a missing default route. I am using a statically configured ip address 
>on a re0 interface.
>
>The powerd script /etc/powerd/scripts/sleep_button is responsible for 
>invoking "/etc/rc.d/network start". Setting the shell xtrace in 
>/etc/rc.d/network revealed (see attachment last_xtrace_lines.txt and 
>_have_rc_postprocessor() from rc.subr) that the network script is 
>failing because it thinks (due to the inherited fd 9 and environment 
>variables: /etc/rc{,.subr} => powerd => /etc/powerd/scripts/sleep_button 
>=> /etc/rc.d/network) it is running from /etc/rc and writes to closed fd 
>9 (_rc_postprocessor_fd). One way to avoid this is to unset the 
>variables exported by /etc/rc and /etc/rc.subr before running rc.d commands.

Thanks for tracking that down. For current (comments inline):

>
>--- etc/rc.subr.orig   2017-03-19 15:04:05.000000000 +0100
>+++ etc/rc.subr        2017-03-19 15:15:36.000000000 +0100
>@@ -663,18 +663,22 @@
>                                       # setup the command to run, and run it
>                                       #
>                       echo "Starting ${name}."
>+                      exported_rc_vars="RC_PID _rc_pid \
>+_rc_original_stdout_fd _rc_original_stderr_fd _rc_postprocessor_fd"
>                       if [ -n "$_chroot" ]; then
>-                              _doit="\
>+                              _doit="(\
>+unset $exported_rc_vars; \
> ${_env:+env $_env }\
> ${_nice:+nice -n $_nice }\
> chroot ${_user:+-u $_user }${_group:+-g $_group }${_groups:+-G $_groups }\
>-$_chroot $command $rc_flags $command_args"
>+$_chroot $command $rc_flags $command_args)"
>                       else
>-                              _doit="\
>+                              _doit="(\
>+unset $exported_rc_vars; \
> ${_chdir:+cd $_chdir; }\
> ${_env:+env $_env }\
> ${_nice:+nice -n $_nice }\
>-$command $rc_flags $command_args"
>+$command $rc_flags $command_args)"
>                               if [ -n "$_user" ]; then
>                                   _doit="su -m $_user -c 'sh -c \"$_doit\"'"
>                               fi

- why kill those only for 'start'? I guess it is only important for start,
  but...
- I don't think think that the parens are needed; after all the cd command
  is separate.
- Why not append those to $_env as "RC_PID= _rc_pid=" ...

>@@ -818,6 +822,7 @@
>       [ -n "${_rc_postprocessor_fd}" ] || { unset _rc_pid; return 1; }
>       eval ": >&${_rc_postprocessor_fd}" 2>/dev/null \
>       || { unset _rc_pid; return 1; }
>+      fdflags -s +cloexec "${_rc_postprocessor_fd}"

I think this belongs to rc, where the fd is created and I've committed
the fdflags line there.

Thanks,

christos

Reply via email to