Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Oct 2016 08:32:24 +1000
From:      Andy Farkas <chuzzwassa@gmail.com>
To:        Konstantin Belousov <kostikbel@gmail.com>, freebsd-stable@freebsd.org
Subject:   Re: Reproducible panic - Going nowhere without my init!
Message-ID:  <CAAJ1ec1omKtGBXATvyC96N22Ue6s6wp_dfmdkHGWDoqBfehMcw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
With your latest patch applied, I ran through my procedure more
than a dozen times and no panics!

Any explanation why sleep(STALL_TIMEOUT) as apposed to a
bunch of sleep(1)'s tickles the panic?

Also, it is definitely not sleeping for 30 seconds. I guess some
event interrupts the sleep loop?

Thanks heaps for your time and effort,

-andyf

%%%
Please try the following patch.

diff --git a/sbin/init/init.c b/sbin/init/init.c
index bda86b5..25ac2bd 100644
--- a/sbin/init/init.c
+++ b/sbin/init/init.c
@@ -870,6 +870,7 @@ single_user(void)
  sigset_t mask;
  const char *shell;
  char *argv[2];
+ struct timeval tv, tn;
 #ifdef SECURE
  struct ttyent *typ;
  struct passwd *pp;
@@ -884,8 +885,13 @@ single_user(void)
  if (Reboot) {
  /* Instead of going single user, let's reboot the machine */
  sync();
- reboot(howto);
- _exit(0);
+ if (reboot(howto) == -1) {
+ emergency("reboot(%#x) failed, %s", howto,
+    strerror(errno));
+ _exit(1); /* panic and reboot */
+ }
+ warning("reboot(%#x) returned", howto);
+ _exit(0); /* panic as well */
  }

  shell = get_shell();
@@ -1002,7 +1008,14 @@ single_user(void)
  *  reboot(8) killed shell?
  */
  warning("single user shell terminated.");
- sleep(STALL_TIMEOUT);
+ gettimeofday(&tv, NULL);
+ tn = tv;
+ tv.tv_sec += STALL_TIMEOUT;
+ while (tv.tv_sec > tn.tv_sec || (tv.tv_sec ==
+    tn.tv_sec && tv.tv_usec > tn.tv_usec)) {
+ sleep(1);
+ gettimeofday(&tn, NULL);
+ }
  _exit(0);
  } else {
  warning("single user shell terminated, restarting");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAAJ1ec1omKtGBXATvyC96N22Ue6s6wp_dfmdkHGWDoqBfehMcw>