[boinc] 01/05: Imported Upstream version 7.6.9+dfsg

Gianfranco Costamagna locutusofborg-guest at moszumanska.debian.org
Tue Sep 8 13:44:38 UTC 2015


This is an automated email from the git hooks/post-receive script.

locutusofborg-guest pushed a commit to branch master
in repository boinc.

commit 260520d276cd08476432797700269956456103b9
Author: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
Date:   Thu Sep 3 21:01:33 2015 +0200

    Imported Upstream version 7.6.9+dfsg
---
 android/BOINC/AndroidManifest.xml |  4 +--
 client/app.cpp                    | 14 ++++----
 client/app_control.cpp            | 13 +++++--
 client/app_start.cpp              | 36 ++++++++++++--------
 client/client_state.cpp           |  6 ++--
 client/cpu_sched.cpp              | 34 +++++++++---------
 client/log_flags.cpp              | 28 ++++++++++++++-
 client/project.cpp                |  2 +-
 clientgui/DlgAdvPreferences.cpp   | 19 ++++++-----
 clientgui/ViewProjects.cpp        |  4 ++-
 clientgui/sg_DlgPreferences.cpp   | 12 +++++++
 clientgui/sg_DlgPreferences.h     |  3 ++
 configure.ac                      |  2 +-
 lib/app_ipc.cpp                   | 72 +++++++++++++++++++++------------------
 lib/app_ipc.h                     |  4 +++
 lib/win_util.cpp                  |  4 ++-
 version.log                       |  2 +-
 17 files changed, 163 insertions(+), 96 deletions(-)

diff --git a/android/BOINC/AndroidManifest.xml b/android/BOINC/AndroidManifest.xml
index 81b1b4a..40b6c9d 100644
--- a/android/BOINC/AndroidManifest.xml
+++ b/android/BOINC/AndroidManifest.xml
@@ -20,8 +20,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="edu.berkeley.boinc"
     android:installLocation="internalOnly"
-    android:versionCode="121"
-    android:versionName="7.6.7" > <!-- installation on SD card would break boot receiver -->
+    android:versionCode="123"
+    android:versionName="7.6.9" > <!-- installation on SD card would break boot receiver -->
 
 
     <!-- Add Google Play store metadata informing the store we can run on tablets and other large screen devices -->
diff --git a/client/app.cpp b/client/app.cpp
index d8b4e3f..3fb3fde 100644
--- a/client/app.cpp
+++ b/client/app.cpp
@@ -668,11 +668,12 @@ int ACTIVE_TASK::write(MIOFILE& fout) {
 #ifndef SIM
 
 int ACTIVE_TASK::write_gui(MIOFILE& fout) {
-    // if the app hasn't reported fraction done, and time has elapsed,
-    // estimate fraction done
+    // if the app hasn't reported fraction done or reported > 1,
+    // and a minute has elapsed, estimate fraction done in a
+    // way that constantly increases and approaches 1.
     //
     double fd = fraction_done;
-    if (fd == 0 && elapsed_time > 0) {
+    if (((fd<=0)||(fd>1)) && elapsed_time > 60) {
         double est_time = wup->rsc_fpops_est/app_version->flops;
         double x = elapsed_time/est_time;
         fd = 1 - exp(-x);
@@ -877,9 +878,6 @@ int ACTIVE_TASK_SET::write(MIOFILE& fout) {
 }
 
 int ACTIVE_TASK_SET::parse(XML_PARSER& xp) {
-    ACTIVE_TASK* atp;
-    int retval;
-
     while (!xp.get_tag()) {
         if (xp.match_tag("/active_task_set")) return 0;
         else if (xp.match_tag("active_task")) {
@@ -887,8 +885,8 @@ int ACTIVE_TASK_SET::parse(XML_PARSER& xp) {
             ACTIVE_TASK at;
             at.parse(xp);
 #else
-            atp = new ACTIVE_TASK;
-            retval = atp->parse(xp);
+            ACTIVE_TASK* atp = new ACTIVE_TASK;
+            int retval = atp->parse(xp);
             if (!retval) {
                 if (slot_taken(atp->slot)) {
                     msg_printf(atp->result->project, MSG_INTERNAL_ERROR,
diff --git a/client/app_control.cpp b/client/app_control.cpp
index b40f07a..bb50223 100644
--- a/client/app_control.cpp
+++ b/client/app_control.cpp
@@ -1352,6 +1352,7 @@ bool ACTIVE_TASK::get_app_status_msg() {
     double fd;
     int other_pid;
     double dtemp;
+    static double last_msg_time=0;
 
     if (!app_client_shm.shm) {
         msg_printf(result->project, MSG_INFO,
@@ -1370,8 +1371,6 @@ bool ACTIVE_TASK::get_app_status_msg() {
     want_network = 0;
     current_cpu_time = checkpoint_cpu_time = 0.0;
     if (parse_double(msg_buf, "<fraction_done>", fd)) {
-        if (fd < 0) fd = 0;
-        if (fd > 1) fd = 1;
         // fraction_done will be reported as zero
         // until the app's first call to boinc_fraction_done().
         // So ignore zeros.
@@ -1383,6 +1382,14 @@ bool ACTIVE_TASK::get_app_status_msg() {
                 first_fraction_done = fd;
                 first_fraction_done_elapsed_time = elapsed_time;
             }
+            if (log_flags.task_debug && (fd<0 || fd>1)) {
+                if (gstate.now > last_msg_time + 60) {
+                    msg_printf(this->wup->project, MSG_INFO,
+                        "[task_debug] app reported bad fraction done: %f", fd
+                    );
+                    last_msg_time = gstate.now;
+                }
+            }
         }
     }
     parse_double(msg_buf, "<current_cpu_time>", current_cpu_time);
@@ -1507,7 +1514,7 @@ void ACTIVE_TASK_SET::get_msgs() {
         atp = active_tasks[i];
         if (!atp->process_exists()) continue;
         old_time = atp->checkpoint_cpu_time;
-        if (atp->scheduler_state == CPU_SCHED_SCHEDULED) {
+        if (atp->scheduler_state == CPU_SCHED_SCHEDULED && !gstate.tasks_suspended) {
             double x = atp->result->dont_throttle()?et_diff:et_diff_throttle;
             atp->elapsed_time += x;
             atp->wup->project->elapsed_time += x;
diff --git a/client/app_start.cpp b/client/app_start.cpp
index 42e0a46..c44ba9c 100644
--- a/client/app_start.cpp
+++ b/client/app_start.cpp
@@ -195,26 +195,27 @@ int ACTIVE_TASK::get_shmem_seg_name() {
 }
 
 void ACTIVE_TASK::init_app_init_data(APP_INIT_DATA& aid) {
+    PROJECT* project = wup->project;
     aid.major_version = BOINC_MAJOR_VERSION;
     aid.minor_version = BOINC_MINOR_VERSION;
     aid.release = BOINC_RELEASE;
     aid.app_version = app_version->version_num;
     safe_strcpy(aid.app_name, wup->app->name);
-    safe_strcpy(aid.symstore, wup->project->symstore);
+    safe_strcpy(aid.symstore, project->symstore);
     safe_strcpy(aid.acct_mgr_url, gstate.acct_mgr_info.master_url);
-    if (wup->project->project_specific_prefs.length()) {
+    if (project->project_specific_prefs.length()) {
         aid.project_preferences = strdup(
-            wup->project->project_specific_prefs.c_str()
+            project->project_specific_prefs.c_str()
         );
     }
-    aid.userid = wup->project->userid;
-    aid.teamid = wup->project->teamid;
-    aid.hostid = wup->project->hostid;
-    safe_strcpy(aid.user_name, wup->project->user_name);
-    safe_strcpy(aid.team_name, wup->project->team_name);
-    safe_strcpy(aid.project_dir, wup->project->project_dir_absolute());
+    aid.userid = project->userid;
+    aid.teamid = project->teamid;
+    aid.hostid = project->hostid;
+    safe_strcpy(aid.user_name, project->user_name);
+    safe_strcpy(aid.team_name, project->team_name);
+    safe_strcpy(aid.project_dir, project->project_dir_absolute());
     relative_to_absolute("", aid.boinc_dir);
-    safe_strcpy(aid.authenticator, wup->project->authenticator);
+    safe_strcpy(aid.authenticator, project->authenticator);
     aid.slot = slot;
 #ifdef _WIN32
     if (strstr(gstate.host_info.os_name, "Windows 2000")) {
@@ -229,13 +230,13 @@ void ACTIVE_TASK::init_app_init_data(APP_INIT_DATA& aid) {
 #endif
     safe_strcpy(aid.wu_name, wup->name);
     safe_strcpy(aid.result_name, result->name);
-    aid.user_total_credit = wup->project->user_total_credit;
-    aid.user_expavg_credit = wup->project->user_expavg_credit;
-    aid.host_total_credit = wup->project->host_total_credit;
-    aid.host_expavg_credit = wup->project->host_expavg_credit;
+    aid.user_total_credit = project->user_total_credit;
+    aid.user_expavg_credit = project->user_expavg_credit;
+    aid.host_total_credit = project->host_total_credit;
+    aid.host_expavg_credit = project->host_expavg_credit;
     double rrs = gstate.runnable_resource_share(RSC_TYPE_CPU);
     if (rrs) {
-        aid.resource_share_fraction = wup->project->resource_share/rrs;
+        aid.resource_share_fraction = project->resource_share/rrs;
     } else {
         aid.resource_share_fraction = 1;
     }
@@ -287,6 +288,11 @@ void ACTIVE_TASK::init_app_init_data(APP_INIT_DATA& aid) {
     aid.shmem_seg_name = shmem_seg_name;
 #endif
     aid.wu_cpu_time = checkpoint_cpu_time;
+    APP_VERSION* avp = app_version;
+    for (unsigned int i=0; i<avp->app_files.size(); i++) {
+        FILE_REF& fref = avp->app_files[i];
+        aid.app_files.push_back(string(fref.file_name));
+    }
 }
 
 // write the app init file.
diff --git a/client/client_state.cpp b/client/client_state.cpp
index feb053f..431b8e5 100644
--- a/client/client_state.cpp
+++ b/client/client_state.cpp
@@ -279,6 +279,7 @@ const char* rsc_name_long(int i) {
     return coprocs.coprocs[i].type;             // Some other type
 }
 
+#ifndef SIM
 // alert user if any jobs need more RAM than available
 //
 static void check_too_large_jobs() {
@@ -301,6 +302,7 @@ static void check_too_large_jobs() {
         }
     }
 }
+#endif
 
 // Something has failed N times.
 // Calculate an exponential backoff between MIN and MAX
@@ -1664,7 +1666,6 @@ bool CLIENT_STATE::update_results() {
     vector<RESULT*>::iterator result_iter;
     bool action = false;
     static double last_time=0;
-    int retval;
 
     if (!clock_change && now - last_time < UPDATE_RESULTS_PERIOD) return false;
     last_time = now;
@@ -1680,8 +1681,7 @@ bool CLIENT_STATE::update_results() {
             break;
 #ifndef SIM
         case RESULT_FILES_DOWNLOADING:
-            retval = input_files_available(rp, false);
-            if (!retval) {
+            if (input_files_available(rp, false) == 0) {
                 if (rp->avp->app_files.size()==0) {
                     // if this is a file-transfer app, start the upload phase
                     //
diff --git a/client/cpu_sched.cpp b/client/cpu_sched.cpp
index 8548ac9..5991241 100644
--- a/client/cpu_sched.cpp
+++ b/client/cpu_sched.cpp
@@ -170,23 +170,15 @@ struct PROC_RESOURCES {
 
     // we've decided to add this to the runnable list; update bookkeeping
     //
-    void schedule(RESULT* rp, const char* description) {
-        if (log_flags.cpu_sched_debug) {
-            msg_printf(rp->project, MSG_INFO,
-                "[cpu_sched_debug] add to run list: %s (%s) (prio %f)",
-                rp->name, description,
-                rp->project->sched_priority
-            );
-        }
-        if (rp->uses_coprocs()) {
+    void schedule(RESULT* rp, bool is_edf) {
+        int rt = rp->avp->gpu_usage.rsc_type;
+        if (rt) {
             // if the resource type has exclusions, don't reserve instances.
             // It means that the run list will include all jobs
             // for that resource type.
             // Inefficient, but necessary to avoid starvation cases.
             //
-            int rt = rp->avp->gpu_usage.rsc_type;
-            bool dont_reserve = rsc_work_fetch[rt].has_exclusions;
-            if (!dont_reserve) {
+            if (! rsc_work_fetch[rt].has_exclusions) {
                 reserve_coprocs(*rp);
             }
             //ncpus_used_st += rp->avp->avg_ncpus;
@@ -196,11 +188,21 @@ struct PROC_RESOURCES {
             // - there's an uncheckpointed GPU job that uses little CPU
             // - we end up running the uncheckpointed job
             // - this causes all or part of a CPU to be idle
+
         } else if (rp->avp->avg_ncpus > 1) {
             ncpus_used_mt += rp->avp->avg_ncpus;
         } else {
             ncpus_used_st += rp->avp->avg_ncpus;
         }
+        if (log_flags.cpu_sched_debug) {
+            msg_printf(rp->project, MSG_INFO,
+                "[cpu_sched_debug] add to run list: %s (%s, %s) (prio %f)",
+                rp->name, 
+                rsc_name_long(rt),
+                is_edf?"EDF":"FIFO",
+                rp->project->sched_priority
+            );
+        }
 
         adjust_rec_sched(rp);
         max_concurrent_inc(rp);
@@ -819,7 +821,7 @@ void add_coproc_jobs(
         rp->already_selected = true;
         atp = gstate.lookup_active_task_by_result(rp);
         if (!proc_rsc.can_schedule(rp, atp)) continue;
-        proc_rsc.schedule(rp, "coprocessor job, EDF");
+        proc_rsc.schedule(rp, true);
         rp->project->rsc_pwf[rsc_type].deadlines_missed_copy--;
         rp->edf_scheduled = true;
         run_list.push_back(rp);
@@ -836,7 +838,7 @@ void add_coproc_jobs(
         rp->already_selected = true;
         atp = gstate.lookup_active_task_by_result(rp);
         if (!proc_rsc.can_schedule(rp, atp)) continue;
-        proc_rsc.schedule(rp, "coprocessor job, FIFO");
+        proc_rsc.schedule(rp, false);
         run_list.push_back(rp);
     }
 }
@@ -920,7 +922,7 @@ void CLIENT_STATE::make_run_list(vector<RESULT*>& run_list) {
         rp->already_selected = true;
         atp = lookup_active_task_by_result(rp);
         if (!proc_rsc.can_schedule(rp, atp)) continue;
-        proc_rsc.schedule(rp, "CPU job, EDF");
+        proc_rsc.schedule(rp, true);
         rp->project->rsc_pwf[0].deadlines_missed_copy--;
         rp->edf_scheduled = true;
         run_list.push_back(rp);
@@ -937,7 +939,7 @@ void CLIENT_STATE::make_run_list(vector<RESULT*>& run_list) {
         if (!rp) break;
         atp = lookup_active_task_by_result(rp);
         if (!proc_rsc.can_schedule(rp, atp)) continue;
-        proc_rsc.schedule(rp, "CPU job, priority order");
+        proc_rsc.schedule(rp, false);
         run_list.push_back(rp);
     }
 
diff --git a/client/log_flags.cpp b/client/log_flags.cpp
index c33feb1..4bbfdbc 100644
--- a/client/log_flags.cpp
+++ b/client/log_flags.cpp
@@ -149,10 +149,18 @@ static void show_exclude_gpu(EXCLUDE_GPU& e) {
 // This is called during startup (after client_state.xml has been read)
 // and also from the handle_read_cc_config GUI RPC.
 //
-// TODO: show other config options
+// Keep these in alpha order
+//
+// TODO: show all config options
 //
 void CC_CONFIG::show() {
     unsigned int i;
+    if (abort_jobs_on_exit) {
+        msg_printf(NULL, MSG_INFO, "Config: abort jobs on exit");
+    }
+    if (allow_multiple_clients) {
+        msg_printf(NULL, MSG_INFO, "Config: allow multiple clients");
+    }
     if (allow_remote_gui_rpc) {
         msg_printf(NULL, MSG_INFO,
             "Config: GUI RPC allowed from any host"
@@ -201,6 +209,15 @@ void CC_CONFIG::show() {
             exclusive_gpu_apps[i].c_str()
         );
     }
+    if (exit_after_finish) {
+        msg_printf(NULL, MSG_INFO, "Config: exit after finish");
+    }
+    if (exit_before_start) {
+        msg_printf(NULL, MSG_INFO, "Config: exit before start task");
+    }
+    if (exit_when_idle) {
+        msg_printf(NULL, MSG_INFO, "Config: exit when idle");
+    }
     if (fetch_minimal_work) {
         msg_printf(NULL, MSG_INFO, "Config: fetch minimal work");
     }
@@ -237,6 +254,9 @@ void CC_CONFIG::show() {
     if (report_results_immediately) {
         msg_printf(NULL, MSG_INFO, "Config: report completed tasks immediately");
     }
+    if (unsigned_apps_ok) {
+        msg_printf(NULL, MSG_INFO, "Config: unsigned apps OK");
+    }
     if (use_all_gpus) {
         msg_printf(NULL, MSG_INFO, "Config: use all coprocessors");
     }
@@ -583,6 +603,12 @@ void process_gpu_exclusions() {
                 COPROC& cp = coprocs.coprocs[k];
                 if (eg.type == cp.type) {
                     found = true;
+
+                    // skip exclusions of non-existent devices
+                    //
+                    if (eg.device_num && (cp.device_num_index(eg.device_num) < 0)) {
+                        break;
+                    }
                     rsc_work_fetch[k].has_exclusions = true;
                     break;
                 }
diff --git a/client/project.cpp b/client/project.cpp
index 9424f1e..541261b 100644
--- a/client/project.cpp
+++ b/client/project.cpp
@@ -217,7 +217,7 @@ int PROJECT::parse_state(XML_PARSER& xp) {
         }
         if (xp.parse_int("nrpc_failures", nrpc_failures)) continue;
         if (xp.parse_int("master_fetch_failures", master_fetch_failures)) continue;
-        if (xp.parse_double("min_rpc_time", min_rpc_time)) continue;
+        if (xp.parse_double("min_rpc_time", x)) continue;
         if (xp.parse_bool("master_url_fetch_pending", master_url_fetch_pending)) continue;
         if (xp.parse_int("sched_rpc_pending", sched_rpc_pending)) continue;
         if (xp.parse_double("next_rpc_time", next_rpc_time)) continue;
diff --git a/clientgui/DlgAdvPreferences.cpp b/clientgui/DlgAdvPreferences.cpp
index 3e26844..4e6f6de 100644
--- a/clientgui/DlgAdvPreferences.cpp
+++ b/clientgui/DlgAdvPreferences.cpp
@@ -686,6 +686,7 @@ bool CDlgAdvPreferences::ValidateInput() {
     wxString invMsgTimeSpan = _("Start time must be different from end time");
     wxString invMsgLimit10 = _("Number must be between 0 and 10");
     wxString invMsgLimit100 = _("Number must be between 0 and 100");
+    wxString invMsgLimit1_100 = _("Number must be between 1 and 100");
     wxString buffer;
     double startTime, endTime;
 
@@ -704,7 +705,7 @@ bool CDlgAdvPreferences::ValidateInput() {
     
     if(m_txtProcIdleFor->IsEnabled()) {
         buffer = m_txtProcIdleFor->GetValue();
-        if(!IsValidFloatValue(buffer)) {
+        if(!IsValidFloatValueBetween(buffer, 0, 10000)) {
             ShowErrorMessage(invMsgFloat,m_txtProcIdleFor);
             return false;
         }
@@ -712,8 +713,8 @@ bool CDlgAdvPreferences::ValidateInput() {
 
     if (m_chkMaxLoad->IsChecked()) {
         buffer = m_txtMaxLoad->GetValue();
-        if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) {
-            ShowErrorMessage(invMsgLimit100, m_txtMaxLoad);
+        if(!IsValidFloatValueBetween(buffer, 1.0, 100.0)) {
+            ShowErrorMessage(invMsgLimit1_100, m_txtMaxLoad);
             return false;
         }
     }
@@ -807,20 +808,20 @@ bool CDlgAdvPreferences::ValidateInput() {
     }
     
     buffer = m_txtMemoryMaxInUse->GetValue();
-    if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) {
-        ShowErrorMessage(invMsgLimit100, m_txtMemoryMaxInUse);
+    if(!IsValidFloatValueBetween(buffer, 1.0, 100.0)) {
+        ShowErrorMessage(invMsgLimit1_100, m_txtMemoryMaxInUse);
         return false;
     }
     
     buffer = m_txtMemoryMaxOnIdle->GetValue();
-    if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) {
-        ShowErrorMessage(invMsgLimit100, m_txtMemoryMaxOnIdle);
+    if(!IsValidFloatValueBetween(buffer, 1.0, 100.0)) {
+        ShowErrorMessage(invMsgLimit1_100, m_txtMemoryMaxOnIdle);
         return false;
     }
 
     buffer = m_txtDiskMaxSwap->GetValue();
-    if(!IsValidFloatValueBetween(buffer, 0.0, 100.0)) {
-        ShowErrorMessage(invMsgLimit100, m_txtDiskMaxSwap);
+    if(!IsValidFloatValueBetween(buffer, 1.0, 100.0)) {
+        ShowErrorMessage(invMsgLimit1_100, m_txtDiskMaxSwap);
         return false;
     }
     
diff --git a/clientgui/ViewProjects.cpp b/clientgui/ViewProjects.cpp
index 566a343..47b2aaf 100644
--- a/clientgui/ViewProjects.cpp
+++ b/clientgui/ViewProjects.cpp
@@ -75,7 +75,9 @@ static int DefaultShownColumns[] = { COLUMN_PROJECT, COLUMN_ACCOUNTNAME, COLUMN_
 // TODO: thousands separators
 // TODO: use these in simple view too.
 static void format_total_credit(float credit, wxString& strBuffer)  {
-    strBuffer.Printf(wxT("%.0f"), credit);
+    unsigned long x = credit;
+    char* p = comma_print(x);
+    strBuffer = wxString(p, wxConvUTF8);
 }
 static void format_avg_credit(float credit, wxString& strBuffer)  {
     strBuffer.Printf(wxT("%0.2f"), credit);
diff --git a/clientgui/sg_DlgPreferences.cpp b/clientgui/sg_DlgPreferences.cpp
index 21353cc..1f935b2 100644
--- a/clientgui/sg_DlgPreferences.cpp
+++ b/clientgui/sg_DlgPreferences.cpp
@@ -96,6 +96,8 @@ CPanelPreferences::~CPanelPreferences( )
 bool CPanelPreferences::Create()
 {
     m_backgroundBitmap = NULL;
+    lastErrorCtrl = NULL;
+    stdTextBkgdColor = *wxWHITE;
 
     CreateControls();
 
@@ -846,6 +848,16 @@ void CPanelPreferences::ShowErrorMessage(wxString& message,wxTextCtrl* errorCtrl
     if(message.IsEmpty()){
         message = _("invalid input value detected");
     }
+    if (lastErrorCtrl) {
+        lastErrorCtrl->SetBackgroundColour(stdTextBkgdColor);
+        lastErrorCtrl->Refresh();
+    }
+    if (lastErrorCtrl != errorCtrl) {
+        stdTextBkgdColor = errorCtrl->GetBackgroundColour();
+    }
+    errorCtrl->SetBackgroundColour(wxColour(255, 192, 192));
+    errorCtrl->Refresh();
+    lastErrorCtrl = errorCtrl;
     wxGetApp().SafeMessageBox(message,_("Validation Error"),wxOK | wxCENTRE | wxICON_ERROR,this);
     errorCtrl->SetFocus();
 }
diff --git a/clientgui/sg_DlgPreferences.h b/clientgui/sg_DlgPreferences.h
index 97805de..5027d62 100644
--- a/clientgui/sg_DlgPreferences.h
+++ b/clientgui/sg_DlgPreferences.h
@@ -174,6 +174,9 @@ private:
     wxBitmap* m_backgroundBitmap;
     
     bool m_bOKToShow;
+
+    wxColour stdTextBkgdColor;
+    wxTextCtrl* lastErrorCtrl;
    
 ////@end CPanelPreferences member variables
     GLOBAL_PREFS      global_preferences_working;
diff --git a/configure.ac b/configure.ac
index 9bd82ae..8c6a8c5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6,7 +6,7 @@ dnl not sure exactly what the minimum version is (but 2.13 wont work)
 AC_PREREQ(2.58)
 
 dnl Set the BOINC version here.  You can also use the set-version script.
-AC_INIT(BOINC, 7.6.7)
+AC_INIT(BOINC, 7.6.9)
 AC_CONFIG_MACRO_DIR([m4])
 LIBBOINC_VERSION=`echo ${PACKAGE_VERSION} | sed 's/\./:/g'`
 AC_SUBST([LIBBOINC_VERSION])
diff --git a/lib/app_ipc.cpp b/lib/app_ipc.cpp
index 4b452db..39e745d 100644
--- a/lib/app_ipc.cpp
+++ b/lib/app_ipc.cpp
@@ -79,45 +79,46 @@ void APP_INIT_DATA::copy(const APP_INIT_DATA& a) {
                 
     // use assignment for the rest, especially the classes
     // (so that the overloaded operators are called!)
-    major_version                 = a.major_version;               
-    minor_version                 = a.minor_version;
-    release                       = a.release;
-    app_version                   = a.app_version;
-    userid                        = a.userid;
-    teamid                        = a.teamid;
-    hostid                        = a.hostid;
-    slot                          = a.slot;
-    client_pid                    = a.client_pid;
-    user_total_credit             = a.user_total_credit;
-    user_expavg_credit            = a.user_expavg_credit;
-    host_total_credit             = a.host_total_credit;
-    host_expavg_credit            = a.host_expavg_credit;
-    resource_share_fraction       = a.resource_share_fraction;
-    host_info                     = a.host_info;
-    proxy_info                    = a.proxy_info;
-    global_prefs                  = a.global_prefs;
-    starting_elapsed_time         = a.starting_elapsed_time;
-    using_sandbox                 = a.using_sandbox;
-    vm_extensions_disabled        = a.vm_extensions_disabled;
-    rsc_fpops_est                 = a.rsc_fpops_est;
-    rsc_fpops_bound               = a.rsc_fpops_bound;
-    rsc_memory_bound              = a.rsc_memory_bound;
-    rsc_disk_bound                = a.rsc_disk_bound;
-    computation_deadline          = a.computation_deadline;
-    fraction_done_start           = a.fraction_done_start;
-    fraction_done_end             = a.fraction_done_end;
-    gpu_device_num                = a.gpu_device_num;
-    gpu_opencl_dev_index          = a.gpu_opencl_dev_index;
-    gpu_usage                     = a.gpu_usage;
-    ncpus                         = a.ncpus;
-    checkpoint_period             = a.checkpoint_period;
-    wu_cpu_time                   = a.wu_cpu_time;
+    major_version               = a.major_version;               
+    minor_version               = a.minor_version;
+    release                     = a.release;
+    app_version                 = a.app_version;
+    userid                      = a.userid;
+    teamid                      = a.teamid;
+    hostid                      = a.hostid;
+    slot                        = a.slot;
+    client_pid                  = a.client_pid;
+    user_total_credit           = a.user_total_credit;
+    user_expavg_credit          = a.user_expavg_credit;
+    host_total_credit           = a.host_total_credit;
+    host_expavg_credit          = a.host_expavg_credit;
+    resource_share_fraction     = a.resource_share_fraction;
+    host_info                   = a.host_info;
+    proxy_info                  = a.proxy_info;
+    global_prefs                = a.global_prefs;
+    starting_elapsed_time       = a.starting_elapsed_time;
+    using_sandbox               = a.using_sandbox;
+    vm_extensions_disabled      = a.vm_extensions_disabled;
+    rsc_fpops_est               = a.rsc_fpops_est;
+    rsc_fpops_bound             = a.rsc_fpops_bound;
+    rsc_memory_bound            = a.rsc_memory_bound;
+    rsc_disk_bound              = a.rsc_disk_bound;
+    computation_deadline        = a.computation_deadline;
+    fraction_done_start         = a.fraction_done_start;
+    fraction_done_end           = a.fraction_done_end;
+    gpu_device_num              = a.gpu_device_num;
+    gpu_opencl_dev_index        = a.gpu_opencl_dev_index;
+    gpu_usage                   = a.gpu_usage;
+    ncpus                       = a.ncpus;
+    checkpoint_period           = a.checkpoint_period;
+    wu_cpu_time                 = a.wu_cpu_time;
     if (a.project_preferences) {
         project_preferences = strdup(a.project_preferences);
     } else {
         project_preferences = NULL;
     }
-    vbox_window                   = a.vbox_window;
+    vbox_window                 = a.vbox_window;
+    app_files                   = a.app_files;
 }
 
 int write_init_data_file(FILE* f, APP_INIT_DATA& ai) {
@@ -238,6 +239,9 @@ int write_init_data_file(FILE* f, APP_INIT_DATA& ai) {
     ai.host_info.write(mf, true, true);
     ai.proxy_info.write(mf);
     ai.global_prefs.write(mf);
+    for (unsigned int i=0; i<ai.app_files.size(); i++) {
+        fprintf(f, "<app_file>%s</app_file>\n", ai.app_files[i].c_str());
+    }
     fprintf(f, "</app_init_data>\n");
     return 0;
 }
diff --git a/lib/app_ipc.h b/lib/app_ipc.h
index d0e3ae5..617bbfd 100644
--- a/lib/app_ipc.h
+++ b/lib/app_ipc.h
@@ -202,6 +202,10 @@ struct APP_INIT_DATA {
     //
     bool vbox_window;       // whether to open a console window for VM apps
 
+    // list of files in the app version (for wrappers)
+    //
+    std::vector<std::string> app_files;
+
     // Items used by the BOINC runtime system
     //
     double checkpoint_period;     // recommended checkpoint period
diff --git a/lib/win_util.cpp b/lib/win_util.cpp
index a14b3b6..057a87b 100644
--- a/lib/win_util.cpp
+++ b/lib/win_util.cpp
@@ -49,6 +49,9 @@ BOOL TerminateProcessById( DWORD dwProcessID ) {
     return bRetVal;
 }
 
+// change the current directory to the BOINC data directory
+// in the registry, if it exists
+//
 void chdir_to_data_dir() {
     LONG    lReturnValue;
     HKEY    hkSetupHive;
@@ -58,7 +61,6 @@ void chdir_to_data_dir() {
     DWORD   dwValueType = REG_EXPAND_SZ;
     DWORD   dwSize = 0;
 
-    // change the current directory to the boinc data directory if it exists
     lReturnValue = RegOpenKeyExA(
         HKEY_LOCAL_MACHINE, 
         "SOFTWARE\\Space Sciences Laboratory, U.C. Berkeley\\BOINC Setup",  
diff --git a/version.log b/version.log
index e0a3f8c..3c0381a 100644
--- a/version.log
+++ b/version.log
@@ -1 +1 @@
-7.6.7
+7.6.9

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-boinc/boinc.git



More information about the pkg-boinc-commits mailing list