From 79adf59f9844528ec04e28ae4019454c9a916c5c Mon Sep 17 00:00:00 2001 From: David Anderson Date: Mon, 16 Jul 2007 20:30:21 +0000 Subject: [PATCH] - client: if can't write state file, don't immediately exit, but don't do anything other than handle GUI RPCs. After 50 secs, print an "about to exit" message. After 60 seconds, exit svn path=/trunk/boinc/; revision=13162 --- checkin_notes | 9 +++++++++ client/client_state.C | 29 +++++++++++++++++++++++++---- client/client_state.h | 6 +++++- doc/boinc_news.php | 4 ++++ doc/download_all.php | 14 +++++--------- 5 files changed, 48 insertions(+), 14 deletions(-) diff --git a/checkin_notes b/checkin_notes index d69ad0fb03..55c59b07e4 100755 --- a/checkin_notes +++ b/checkin_notes @@ -7301,3 +7301,12 @@ David 16 July 2007 clientgui/ BOINCGridCtrl.cpp,h ViewWorkGrid.cpp + +David 16 July 2007 + - client: if can't write state file, don't immediately exit, + but don't do anything other than handle GUI RPCs. + After 50 secs, print an "about to exit" message. + After 60 seconds, exit + + client/ + client_state.C,h diff --git a/client/client_state.C b/client/client_state.C index 78b58b36e0..2850902e41 100644 --- a/client/client_state.C +++ b/client/client_state.C @@ -102,6 +102,7 @@ CLIENT_STATE::CLIENT_STATE() { redirect_io = false; disable_graphics = false; work_fetch_no_new_work = false; + cant_write_state_file = false; debt_interval_start = 0; total_wall_cpu_time_this_debt_interval = 0; @@ -247,7 +248,7 @@ int CLIENT_STATE::init() { msg_printf(NULL, MSG_USER_ERROR, "Make sure directory permissions are set correctly" ); - return retval; + cant_write_state_file = true; } // scan user prefs; create file records @@ -421,8 +422,8 @@ void CLIENT_STATE::do_io_or_sleep(double x) { if (n==0) break; - // Limit number of times thru this loop. Can get - // stuck in while loop, if network isn't available, + // Limit number of times thru this loop. + // Can get stuck in while loop, if network isn't available, // DNS lookups tend to eat CPU cycles. // if (loops++ > 99) { @@ -459,6 +460,11 @@ bool CLIENT_STATE::poll_slow_events() { #endif now = dtime(); + + if (cant_write_state_file) { + return false; + } + if (now - old_now > POLL_INTERVAL*10) { if (log_flags.network_status_debug) { msg_printf(0, MSG_INFO, @@ -1210,7 +1216,6 @@ bool CLIENT_STATE::update_results() { // (timeout or idle) // bool CLIENT_STATE::time_to_exit() { - if (!exit_when_idle && !exit_after_app_start_secs) return false; if (exit_after_app_start_secs && (app_started>0) && ((now - app_started) >= exit_after_app_start_secs) @@ -1224,6 +1229,22 @@ bool CLIENT_STATE::time_to_exit() { msg_printf(NULL, MSG_INFO, "exiting because no more results"); return true; } + if (cant_write_state_file) { + static bool first = true; + double t = now - last_wakeup_time; + if (first && t > 50) { + first = false; + msg_printf(NULL, MSG_INFO, + "Can't write state file, exiting in 10 seconds" + ); + } + if (t > 60) { + msg_printf(NULL, MSG_INFO, + "Can't write state file, exiting now" + ); + return true; + } + } return false; } diff --git a/client/client_state.h b/client/client_state.h index 671a879297..7302ac6fdb 100644 --- a/client/client_state.h +++ b/client/client_state.h @@ -161,7 +161,11 @@ public: double now; double last_wakeup_time; bool initialized; - + bool cant_write_state_file; + // failed to write state file. + // In this case we continue to run for 1 minute, + // handling GUI RPCs but doing nothing else, + // so that the Manager can tell the user what the problem is private: bool client_state_dirty; int old_major_version; diff --git a/doc/boinc_news.php b/doc/boinc_news.php index 92909b84ce..ec51009fd6 100644 --- a/doc/boinc_news.php +++ b/doc/boinc_news.php @@ -1,6 +1,10 @@ World Community Grid." +), array("July 12, 2007", "Leiden Classical is using BOINC for education - it provides a diff --git a/doc/download_all.php b/doc/download_all.php index 7a90876496..a2402576d2 100755 --- a/doc/download_all.php +++ b/doc/download_all.php @@ -51,7 +51,6 @@ function show_detail($v) { dl_item("File (click to download)", "$dlink ($s MB)"); dl_item("Version number", $num); dl_item("Release date", $date); - dl_item("Installer type", $type); //dl_item("MD5 checksum of download file", $md); if ($features) { dl_item ("New features", $features); @@ -106,7 +105,7 @@ function show_version($pname, $i, $v) { $status = $v["status"]; if (is_dev($v)) { $status = $status." - +
(MAY BE UNSTABLE - USE ONLY FOR TESTING) "; @@ -122,9 +121,6 @@ function show_version($pname, $i, $v) { Download ($s MB) - - Instructions: $type_text - version details @@ -206,15 +202,15 @@ if ($xml) {

If your computer is not of one of these types, you can

BOINC is not available for Mac OS 9 or earlier. There are no plans to develop an OS 9 version.

The Windows BOINC client can be - deployed across a Windows network + deployed across a Windows network using Active Directory. "; } @@ -223,7 +219,7 @@ if ($xml) { Download information can be restricted by platform and/or version number, and can be obtained in XML format. - Details. + Details. "; page_tail(); }