From 65c82b067fdfb02e72c41882499787b370769957 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 4 Jul 2014 11:11:38 -0700 Subject: [PATCH] API: remove handle_trickle_down and handle_trickle_up from BOINC_OPTIONS. Sending or receiving trickle messages required setting flags in BOINC_OPTIONS. There were two problems with this: 1) it wasn't documented 2) it's not necessary; the act of calling boinc_send_trickle_up() tells the runtime system to do the trickle-up-related stuff. Furthermore, because intermediate file upload shares message channels with trickles, these functions also required the option flags (also undocumented). With this change, you don't need to set options to use trickle messages are intermediate file upload. --- api/boinc_api.cpp | 26 ++++++++++++++++++-------- api/boinc_api.h | 7 ------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/api/boinc_api.cpp b/api/boinc_api.cpp index f24f8c297c..f55a0f08c1 100644 --- a/api/boinc_api.cpp +++ b/api/boinc_api.cpp @@ -135,7 +135,13 @@ static volatile bool standalone = false; static volatile double initial_wu_cpu_time; static volatile bool have_new_trickle_up = false; static volatile bool have_trickle_down = true; - // on first call, scan slot dir for msgs + // set if the client notified us of a trickle-down. + // init to true so the first call to boinc_receive_trickle_down() + // will scan the slot dir for old trickle-down files +static volatile bool handle_trickle_downs = false; + // whether we should check for notifications of trickle_downs + // and file upload status. + // set by boinc_receive_trickle_down() and boinc_upload_file(). static volatile int heartbeat_giveup_count; // interrupt count value at which to give up on client #ifdef _WIN32 @@ -661,7 +667,6 @@ int boinc_get_status(BOINC_STATUS *s) { // static void send_trickle_up_msg() { char buf[MSG_CHANNEL_SIZE]; - BOINCINFO("Sending Trickle Up Message"); if (standalone) return; strcpy(buf, ""); if (have_new_trickle_up) { @@ -671,6 +676,7 @@ static void send_trickle_up_msg() { strcat(buf, "\n"); } if (strlen(buf)) { + BOINCINFO("Sending Trickle Up Message"); if (app_client_shm->shm->trickle_up.send_msg(buf)) { have_new_trickle_up = false; have_new_upload_file = false; @@ -1011,7 +1017,7 @@ static void handle_upload_file_status() { } } -// handle trickle and file upload messages +// handle trickle and file upload status messages // static void handle_trickle_down_msg() { char buf[MSG_CHANNEL_SIZE]; @@ -1137,7 +1143,7 @@ static void timer_handler() { if (options.check_heartbeat) { handle_heartbeat_msg(); } - if (options.handle_trickle_downs) { + if (handle_trickle_downs) { handle_trickle_down_msg(); } if (options.handle_process_control) { @@ -1183,7 +1189,7 @@ static void timer_handler() { update_app_progress(last_wu_cpu_time, last_checkpoint_cpu_time); } - if (options.handle_trickle_ups) { + if (have_new_trickle_up || have_new_upload_file) { send_trickle_up_msg(); } if (timer_callback) { @@ -1349,7 +1355,6 @@ static int start_worker_signals() { #endif int boinc_send_trickle_up(char* variety, char* p) { - if (!options.handle_trickle_ups) return ERR_NO_OPTION; FILE* f = boinc_fopen(TRICKLE_UP_FILENAME, "wb"); if (!f) return ERR_FOPEN; fprintf(f, "%s\n", variety); @@ -1438,7 +1443,7 @@ int boinc_receive_trickle_down(char* buf, int len) { std::string filename; char path[MAXPATHLEN]; - if (!options.handle_trickle_downs) return false; + handle_trickle_downs = true; if (have_trickle_down) { relative_to_absolute("", path); @@ -1466,10 +1471,15 @@ int boinc_upload_file(std::string& name) { if (!f) return ERR_FOPEN; have_new_upload_file = true; fclose(f); + + // file upload status messages are on same channel as + // trickle down messages, so listen to that channel + // + handle_trickle_downs = true; + return 0; } - int boinc_upload_status(std::string& name) { for (unsigned int i=0; i