diff --git a/checkin_notes b/checkin_notes
index 411978e325..a6e0c72a19 100755
--- a/checkin_notes
+++ b/checkin_notes
@@ -849,3 +849,11 @@ Rytis 19 Jan 2007
util.inc
user/
sample_index.php
+
+David 19 Jan 2007
+ - lib: change retry logic for file system ops
+ so that it does does at least 5 retries
+ AND takes at least 5 seconds.
+
+ lib/
+ filesys.C
diff --git a/doc/boinc_news.php b/doc/boinc_news.php
index 265206adb6..b8bfd72396 100644
--- a/doc/boinc_news.php
+++ b/doc/boinc_news.php
@@ -1,6 +1,11 @@
$project_news = array(
+array("January 18, 2007",
+ "The paper \"Reporting@Home: Delivering Dynamic Graphical Feedback to Participants in Community Computing Projects\"
+ describes how Rosetta@home delivers personalized
+ graphical progress reports to its volunteers."
+),
array("January 17, 2007",
"Linux users: check out
KBoincMgr,
diff --git a/doc/gui_rpc_auth.php b/doc/gui_rpc_auth.php
index 96ad06fcdc..dd5bda412f 100644
--- a/doc/gui_rpc_auth.php
+++ b/doc/gui_rpc_auth.php
@@ -1,6 +1,6 @@
Remote control of the BOINC client
@@ -17,8 +17,8 @@ a core client on a different host:
-And BOINCView (an add-on program developed by a third party) is
-able to control many BOINC clients at once:
+You can use add-on programs
+such as BOINCView to control many BOINC clients at once:
@@ -30,42 +30,30 @@ Since GUI RPCs can control the BOINC client
it is important to protect your BOINC client from unauthorized control.
There are two levels of protection:
-- You can associate a password with the client.
-If a password is used,
-GUI RPCs must be authenticated with this password.
-
- You can restrict RPCs to a limited set of hosts.
+
-
+GUI RPCs are authenticated with a GUI RPC password.
+This is stored with the client in the file gui_rpc_auth.cfg.
+When BOINC first runs, it generates a long, random password.
+You can change it if you like.
+
- You can specify a set of hosts from which RPCs are allowed.
+By default, RPCs are allowed only from the same host.
A GUI RPC is handled only if it passes both levels of protection.
-
-After a standard installation, BOINC is highly secure;
-it generates its own (long, random) password,
-and it doesn't allow access from other hosts.
-
Password protection
-
-If you place a password in a file gui_rpc_auth.cfg
-in your BOINC directory,
-GUI RPCs must be authenticated using the password.
-
-If this file is not present, there is no password protection.
-
-
Remote host restriction
+Allowing RPCs from remote hosts
By default the core client accepts GUI RPCs only from the same host.
-
-
You can allow remote hosts to control a core client in two ways:
- If you run the client with the
--allow_remote_gui_rpc command line option,
-it will accept connections from any host.
-This is not recommended unless the host is behind a firewall
-that blocks the GUI RPC port (1043).
+
-allow_remote_gui_rpc
command line option,
+it will accept connections from any host
+(subject to password authentication).
-
You can create
a file remote_hosts.cfg in your BOINC directory containing
a list of allowed DNS host names or IP addresses (one per line).
-Those hosts will be able to connect.
+These hosts will be able to connect.
The remote_hosts.cfg file can have comment lines that start with either a #
or a ; character as well.
diff --git a/doc/papers.php b/doc/papers.php
index 63d695e4d2..d3f35762cc 100644
--- a/doc/papers.php
+++ b/doc/papers.php
@@ -22,7 +22,7 @@ Also available in
by D. Carroll, C. Rahmlow, T. Psiaki, and G. Wojtaszczyk, July 2005.
-Computer science papers
+Technical papers about BOINC
-
@@ -42,12 +42,6 @@ David P. Anderson and Gilles Fedak
IEEE/ACM International Symposium on Cluster Computing and the Grid,
Singapore, May 16-19, 2006.
-
-
-The Challenge of Volunteer Computing With Lengthy Climate Model Simulations.
-Carl Christensen, Tolu Aina and David Stainforth.
-First IEEE International Conference on e-Science and Grid Technologies.
-5-8 December 2005, Melbourne
-
-
High-Performance Task Distribution for Volunteer Computing.
David P. Anderson, Eric Korpela, Rom Walton
@@ -77,6 +71,19 @@ November 8, 2004, Pittsburgh, USA.
(Also available in
Japanese)
+
+Project-specific papers
+
Powerpoint
Advanced users
diff --git a/lib/filesys.C b/lib/filesys.C
index 2549bc408f..77b4a24d3a 100755
--- a/lib/filesys.C
+++ b/lib/filesys.C
@@ -71,6 +71,10 @@ typedef BOOL (CALLBACK* FreeFn)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULAR
#include "fcgi_stdio.h"
#endif
+#define RETRY_INTERVAL 5
+ // On Windows, retry for this period of time, since some other program
+ // (virus scan, defrag, index) may have the file open.
+
using std::string;
char boinc_failed_file[256];
@@ -251,11 +255,12 @@ int boinc_delete_file(const char* path) {
return 0;
}
#ifdef _WIN32
- for (int i=0; i<5; i++) {
+ double start = dtime();
+ do {
if (DeleteFile(path)) break;
retval = GetLastError();
boinc_sleep(drand()); // avoid lockstep
- }
+ } while (dtime() < start + RETRY_INTERVAL);
#else
retval = unlink(path);
if (retval && g_use_sandbox && (errno == EACCES)) {
@@ -384,11 +389,13 @@ FILE* boinc_fopen(const char* path, const char* mode) {
// (since the file might be open by FastFind, Diskeeper etc.)
//
if (!f) {
- for (int i=0; i<5; i++) {
- boinc_sleep(drand());
+ double start = dtime();
+ do {
+ boinc_sleep(drand()*2);
f = _fsopen(path, mode, _SH_DENYNO);
+ // _SH_DENYNO makes the file sharable while open
if (f) break;
- }
+ } while (dtime() < start + RETRY_INTERVAL);
}
#else
// Unix - if call was interrupted, retry a few times
@@ -454,11 +461,12 @@ int boinc_rename(const char* old, const char* newf) {
#ifdef _WIN32
int retval=0;
boinc_delete_file(newf);
- for (int i=0; i<5; i++) {
+ double start = dtime();
+ do {
if (MoveFile(old, newf)) break;
retval = GetLastError();
- boinc_sleep(drand()); // avoid lockstep
- }
+ boinc_sleep(drand()*2); // avoid lockstep
+ } while (dtime() < start + RETRY_INTERVAL);
return retval;
#else
return rename(old, newf);