mirror of https://github.com/BOINC/boinc.git
*** empty log message ***
svn path=/trunk/boinc/; revision=4109
This commit is contained in:
parent
4c4457e767
commit
632ef443df
|
@ -16692,3 +16692,16 @@ Rom 24 Aug 2004
|
|||
- Tag for 4.04 release, all platforms
|
||||
boinc_release_4_04
|
||||
|
||||
David 24 Aug 2004
|
||||
- Core client: check that shared memory exists before
|
||||
attempting to send or get msgs to an app.
|
||||
This hopefully will fix a crashing bug
|
||||
that happens when you use quit-on-suspend
|
||||
(since the shared-memory seg is deleted on quit)
|
||||
- Separate get_app_status_msg() and get_trickle_up_msg() functions
|
||||
|
||||
client/
|
||||
app.h
|
||||
app_control.C
|
||||
app_graphics.C
|
||||
|
||||
|
|
|
@ -165,7 +165,8 @@ public:
|
|||
bool check_max_mem_exceeded();
|
||||
|
||||
void estimate_frac_rate_of_change(double);
|
||||
bool get_msg();
|
||||
bool get_app_status_msg();
|
||||
bool get_trickle_up_msg();
|
||||
double est_time_to_completion();
|
||||
bool read_stderr_file();
|
||||
bool finish_file_present();
|
||||
|
|
|
@ -66,6 +66,7 @@ bool ACTIVE_TASK::process_exists() {
|
|||
// Send a quit message.
|
||||
//
|
||||
int ACTIVE_TASK::request_exit() {
|
||||
if (!app_client_shm.shm) return 1;
|
||||
app_client_shm.shm->process_control_request.send_msg_overwrite("<quit/>");
|
||||
return 0;
|
||||
}
|
||||
|
@ -180,7 +181,8 @@ int ACTIVE_TASK::preempt(bool quit_task) {
|
|||
//
|
||||
#ifdef _WIN32
|
||||
bool ACTIVE_TASK::handle_exited_app(unsigned long exit_code) {
|
||||
get_msg();
|
||||
get_app_status_msg();
|
||||
get_trickle_up_msg();
|
||||
result->final_cpu_time = checkpoint_cpu_time;
|
||||
if (state == PROCESS_ABORT_PENDING) {
|
||||
state = PROCESS_ABORTED;
|
||||
|
@ -223,7 +225,8 @@ bool ACTIVE_TASK::handle_exited_app(unsigned long exit_code) {
|
|||
bool ACTIVE_TASK::handle_exited_app(int stat, struct rusage rs) {
|
||||
SCOPE_MSG_LOG scope_messages(log_messages, CLIENT_MSG_LOG::DEBUG_TASK);
|
||||
|
||||
get_msg();
|
||||
get_app_status_msg();
|
||||
get_trickle_up_msg();
|
||||
result->final_cpu_time = checkpoint_cpu_time;
|
||||
if (state == PROCESS_ABORT_PENDING) {
|
||||
state = PROCESS_ABORTED;
|
||||
|
@ -325,6 +328,7 @@ void ACTIVE_TASK_SET::send_trickle_downs() {
|
|||
atp = active_tasks[i];
|
||||
if (!atp->process_exists()) continue;
|
||||
if (atp->have_trickle_down) {
|
||||
if (!atp->app_client_shm.shm) continue;
|
||||
sent = atp->app_client_shm.shm->trickle_down.send_msg("<have_trickle_down/>\n");
|
||||
if (sent) atp->have_trickle_down = false;
|
||||
}
|
||||
|
@ -338,6 +342,7 @@ void ACTIVE_TASK_SET::send_heartbeats() {
|
|||
for (i=0; i<active_tasks.size(); i++) {
|
||||
atp = active_tasks[i];
|
||||
if (!atp->process_exists()) continue;
|
||||
if (!atp->app_client_shm.shm) continue;
|
||||
atp->app_client_shm.shm->heartbeat.send_msg("<heartbeat/>\n");
|
||||
}
|
||||
}
|
||||
|
@ -550,6 +555,7 @@ int ACTIVE_TASK::request_reread_prefs() {
|
|||
|
||||
retval = write_app_init_file(aid);
|
||||
if (retval) return retval;
|
||||
if (!app_client_shm.shm) return 0;
|
||||
app_client_shm.shm->graphics_request.send_msg(
|
||||
xml_graphics_modes[MODE_REREAD_PREFS]
|
||||
);
|
||||
|
@ -757,6 +763,7 @@ void ACTIVE_TASK_SET::kill_tasks(PROJECT* proj) {
|
|||
// suspend a task
|
||||
//
|
||||
int ACTIVE_TASK::suspend() {
|
||||
if (!app_client_shm.shm) return 0;
|
||||
app_client_shm.shm->process_control_request.send_msg_overwrite("<suspend/>");
|
||||
state = PROCESS_SUSPENDED;
|
||||
return 0;
|
||||
|
@ -765,6 +772,7 @@ int ACTIVE_TASK::suspend() {
|
|||
// resume a suspended task
|
||||
//
|
||||
int ACTIVE_TASK::unsuspend() {
|
||||
if (!app_client_shm.shm) return 0;
|
||||
app_client_shm.shm->process_control_request.send_msg_overwrite("<resume/>");
|
||||
state = PROCESS_EXECUTING;
|
||||
return 0;
|
||||
|
@ -774,11 +782,11 @@ int ACTIVE_TASK::unsuspend() {
|
|||
// (with CPU done, frac done etc.)
|
||||
// If so parse it and return true.
|
||||
//
|
||||
bool ACTIVE_TASK::get_msg() {
|
||||
bool ACTIVE_TASK::get_app_status_msg() {
|
||||
char msg_buf[MSG_CHANNEL_SIZE];
|
||||
bool found = false;
|
||||
int retval;
|
||||
|
||||
if (!app_client_shm.shm) return false;
|
||||
if (app_client_shm.shm->app_status.get_msg(msg_buf)) {
|
||||
fraction_done = current_cpu_time = checkpoint_cpu_time = 0.0;
|
||||
parse_double(msg_buf, "<fraction_done>", fraction_done);
|
||||
|
@ -788,6 +796,15 @@ bool ACTIVE_TASK::get_msg() {
|
|||
parse_double(msg_buf, "<resident_set_size>", resident_set_size);
|
||||
found = true;
|
||||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
bool ACTIVE_TASK::get_trickle_up_msg() {
|
||||
char msg_buf[MSG_CHANNEL_SIZE];
|
||||
bool found = false;
|
||||
int retval;
|
||||
|
||||
if (!app_client_shm.shm) return false;
|
||||
if (app_client_shm.shm->trickle_up.get_msg(msg_buf)) {
|
||||
if (match_tag(msg_buf, "<have_new_trickle_up/>")) {
|
||||
retval = move_trickle_file();
|
||||
|
@ -814,12 +831,13 @@ bool ACTIVE_TASK_SET::get_msgs() {
|
|||
atp = active_tasks[i];
|
||||
if (!atp->process_exists()) continue;
|
||||
old_time = atp->checkpoint_cpu_time;
|
||||
if (atp->get_msg()) {
|
||||
if (atp->get_app_status_msg()) {
|
||||
atp->estimate_frac_rate_of_change(now);
|
||||
if (old_time != atp->checkpoint_cpu_time) {
|
||||
action = true;
|
||||
}
|
||||
}
|
||||
atp->get_trickle_up_msg();
|
||||
}
|
||||
return action;
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ void ACTIVE_TASK::request_graphics_mode(int mode) {
|
|||
}
|
||||
|
||||
bool ACTIVE_TASK::send_graphics_mode(int mode) {
|
||||
if (!app_client_shm.shm) return false;
|
||||
bool sent = app_client_shm.shm->graphics_request.send_msg(
|
||||
xml_graphics_modes[mode]
|
||||
);
|
||||
|
@ -46,6 +47,8 @@ bool ACTIVE_TASK::send_graphics_mode(int mode) {
|
|||
void ACTIVE_TASK::check_graphics_mode_ack() {
|
||||
int mode;
|
||||
char buf[MSG_CHANNEL_SIZE];
|
||||
|
||||
if (!app_client_shm.shm) return;
|
||||
if (app_client_shm.shm->graphics_reply.get_msg(buf)) {
|
||||
mode = app_client_shm.decode_graphics_msg(buf);
|
||||
//msg_printf(NULL, MSG_INFO, "got graphics ack %d", mode);
|
||||
|
|
|
@ -29,10 +29,10 @@ when it's created; it's a long random string.
|
|||
When a scheduling server replies to an RPC,
|
||||
it includes the account's CPID and hashed email address.
|
||||
<li>
|
||||
The core client stores the CPID and hashed email address
|
||||
The BOINC client stores the CPID and hashed email address
|
||||
of each account to which it's attached.
|
||||
<li>
|
||||
When the core client makes an RPC request to a scheduling server,
|
||||
When the BOINC client makes an RPC request to a scheduling server,
|
||||
it includes the greatest (in terms of string comparison) CPID
|
||||
from among projects with the same hashed email.
|
||||
<li>
|
||||
|
|
Loading…
Reference in New Issue