Comment on attachment 8959924
Bug 336193 - P1: Use SignalPipeWatcher to detect signals SIGTERM/SIGINT/SIGHUP 
and quit application gracefully.

https://reviewboard.mozilla.org/r/228682/#review235302

(I'm not an XPCOM peer and so I considered passing the nsDumpUtils part to
Nathan, but the initial implementation of SignalPipeWatcher was not reviewed
by an XPCOM peer either, and so I guess it doesn't really matter who reviews.)

::: toolkit/xre/nsNativeAppSupportUnix.cpp:692
(Diff revision 1)
> +      static bool dispatchQuit = false;
> +      if (!dispatchQuit) {
> +        dispatchQuit = true;
> +        ForceAppQuitAsync();
> +      }

Is the |dispatchQuit| single quit logic necessary?
It looks like nsAppStartup::mShuttingDown already ensures that multiple Quit() 
calls will be harmless.

https://searchfox.org/mozilla-
central/rev/b29daa46443b30612415c35be0a3c9c13b9dc5f6/toolkit/components/startup/nsAppStartup.cpp#393

::: xpcom/base/nsDumpUtils.h:146
(Diff revision 1)
>    PipeCallback mCallback;
> +  struct sigaction oldAction;

Please follow existing convention with |mOldAction|.

::: xpcom/base/nsDumpUtils.cpp:145
(Diff revision 1)
>    }
> -  SignalInfo signalInfo = { aSignal, aCallback };
> +
> +  // Save current signal action so it can be restored later
> +  struct sigaction oldAction = { 0 };
> +  if (sigaction(aSignal, nullptr, &oldAction) != 0 ||
> +      oldAction.sa_handler == SIG_IGN) {


::: xpcom/base/nsDumpUtils.cpp:145
(Diff revision 1)
>    }
> -  SignalInfo signalInfo = { aSignal, aCallback };
> +
> +  // Save current signal action so it can be restored later
> +  struct sigaction oldAction = { 0 };
> +  if (sigaction(aSignal, nullptr, &oldAction) != 0 ||
> +      oldAction.sa_handler == SIG_IGN) {

Why prevent registering callbacks for signals where the old action is
SIG_IGN?

I guessing this is not necessary.

::: xpcom/base/nsDumpUtils.cpp:163
(Diff revision 1)
> +  // Restore previous signal action
> +  MutexAutoLock lock(mSignalInfoLock);
> +  for (SignalInfoArray::index_type i = 0; i < mSignalInfo.Length(); i++) {
> +    if (aSignal == mSignalInfo[i].mSignal) {
> +      struct sigaction* oldAction = &mSignalInfo[i].oldAction;
> +      if (oldAction->sa_handler &&

SIG_DFL is typically 0.

I assume this is intended to detect when oldAction has not been set, but
mSignalInfo elements are added only when the old action is successfully
retrieved.

Can this check just be dropped?

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/73536

Title:
  MASTER Firefox crashes on instant X server shutdown

To manage notifications about this bug go to:
https://bugs.launchpad.net/firefox/+bug/73536/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to