[setup - the official Cygwin setup program] branch master, updated. release_2.883-1-g703f1a4
kbrown@sourceware.org
kbrown@sourceware.org
Fri Jan 5 16:17:00 GMT 2018
https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/setup.git;h=703f1a444e524b43f3ff52c2ae40372c6bd62f01
commit 703f1a444e524b43f3ff52c2ae40372c6bd62f01
Author: Ken Brown <kbrown@cornell.edu>
Date: Mon Dec 18 19:46:36 2017 -0500
Give TOPLEVEL_CATCH an owner window
The fatal message box produced by TOPLEVEL_CATCH had a NULL owner
window. This meant that the box could be hidden by whatever window
was previously being displayed, so that setup appeared to hang. In
addition, the user could interact with the propsheet window while the
message box was displayed.
Fix this by giving TOPLEVEL_CATCH an "owner" parameter. In all uses
but one (TOPLEVEL_CATCH("main")), there is a non-NULL owner available
that we can use.
Diff:
---
Exception.h | 6 +++---
download.cc | 2 +-
ini.cc | 2 +-
install.cc | 2 +-
main.cc | 2 +-
postinstall.cc | 2 +-
prereq.cc | 2 +-
proppage.cc | 2 +-
site.cc | 2 +-
9 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/Exception.h b/Exception.h
index 7b16612..4aeb49e 100644
--- a/Exception.h
+++ b/Exception.h
@@ -37,15 +37,15 @@ private:
#define APPERR_IO_ERROR 2
#define APPERR_LOGIC_ERROR 3
-#define TOPLEVEL_CATCH(threadname) \
+#define TOPLEVEL_CATCH(owner, threadname) \
catch (Exception *e) \
{ \
- fatal(NULL, IDS_UNCAUGHT_EXCEPTION_WITH_ERRNO, (threadname), \
+ fatal((owner), IDS_UNCAUGHT_EXCEPTION_WITH_ERRNO, (threadname), \
typeid(*e).name(), e->what(), e->errNo()); \
} \
catch (std::exception *e) \
{ \
- fatal(NULL, IDS_UNCAUGHT_EXCEPTION, (threadname), \
+ fatal((owner), IDS_UNCAUGHT_EXCEPTION, (threadname), \
typeid(*e).name(), e->what()); \
}
diff --git a/download.cc b/download.cc
index b606eb1..4a36e64 100644
--- a/download.cc
+++ b/download.cc
@@ -377,7 +377,7 @@ do_download_reflector (void *p)
// Tell the progress page that we're done downloading
Progress.PostMessageNow (WM_APP_DOWNLOAD_THREAD_COMPLETE, 0, next_dialog);
}
- TOPLEVEL_CATCH("download");
+ TOPLEVEL_CATCH((HWND) context[1], "download");
ExitThread(0);
}
diff --git a/ini.cc b/ini.cc
index f021ed2..e9152ec 100644
--- a/ini.cc
+++ b/ini.cc
@@ -422,7 +422,7 @@ do_ini_thread_reflector (void* p)
// Tell the progress page that we're done downloading
Progress.PostMessageNow (WM_APP_SETUP_INI_DOWNLOAD_COMPLETE, 0, succeeded);
}
- TOPLEVEL_CATCH ("ini");
+ TOPLEVEL_CATCH ((HWND) context[1], "ini");
ExitThread (0);
}
diff --git a/install.cc b/install.cc
index 8505199..d6af331 100644
--- a/install.cc
+++ b/install.cc
@@ -997,7 +997,7 @@ do_install_reflector (void *p)
// Tell the progress page that we're done downloading
Progress.PostMessageNow (WM_APP_INSTALL_THREAD_COMPLETE);
}
- TOPLEVEL_CATCH("install");
+ TOPLEVEL_CATCH((HWND) context[1], "install");
ExitThread (0);
}
diff --git a/main.cc b/main.cc
index b44f9b6..7c1170e 100644
--- a/main.cc
+++ b/main.cc
@@ -349,7 +349,7 @@ WinMain (HINSTANCE h,
finish_up:
;
}
- TOPLEVEL_CATCH("main");
+ TOPLEVEL_CATCH(NULL, "main");
// Never reached
return 0;
diff --git a/postinstall.cc b/postinstall.cc
index c871201..3cd6ff0 100644
--- a/postinstall.cc
+++ b/postinstall.cc
@@ -253,7 +253,7 @@ do_postinstall_reflector (void *p)
Progress.PostMessageNow (WM_APP_POSTINSTALL_THREAD_COMPLETE, 0,
s.empty() ? IDD_DESKTOP : IDD_POSTINSTALL);
}
- TOPLEVEL_CATCH("postinstall");
+ TOPLEVEL_CATCH((HWND) context[1], "postinstall");
/* Revert primary group to admins group. This allows to create all the
state files written by setup as admin group owned. */
diff --git a/prereq.cc b/prereq.cc
index 8b1bbbb..0a46ad1 100644
--- a/prereq.cc
+++ b/prereq.cc
@@ -364,7 +364,7 @@ do_prereq_check_reflector (void *p)
// Tell the progress page that we're done prereq checking
Progress.PostMessageNow (WM_APP_PREREQ_CHECK_THREAD_COMPLETE, 0, next_dialog);
}
- TOPLEVEL_CATCH("prereq_check");
+ TOPLEVEL_CATCH((HWND) context[1], "prereq_check");
ExitThread(0);
}
diff --git a/proppage.cc b/proppage.cc
index d4d2926..6b83640 100644
--- a/proppage.cc
+++ b/proppage.cc
@@ -359,7 +359,7 @@ PropertyPage::DialogProc (UINT message, WPARAM wParam, LPARAM lParam)
return OnMessageApp (message, wParam, lParam);
}
}
- TOPLEVEL_CATCH("DialogProc");
+ TOPLEVEL_CATCH(GetHWND (), "DialogProc");
// Wasn't handled
return FALSE;
diff --git a/site.cc b/site.cc
index a945d28..5e20b3b 100644
--- a/site.cc
+++ b/site.cc
@@ -445,7 +445,7 @@ do_download_site_info_thread (void *p)
Progress.PostMessageNow (WM_APP_SITE_INFO_DOWNLOAD_COMPLETE, 0, IDD_SITE);
}
}
- TOPLEVEL_CATCH("site");
+ TOPLEVEL_CATCH((HWND) context[1], "site");
ExitThread(0);
}
More information about the Cygwin-apps-cvs
mailing list