[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