- client: fix bug that would falsely report DLL init errors

- client: don't crash when detach a project using anonymous platform
        (fixes #511)

svn path=/trunk/boinc/; revision=14348
This commit is contained in:
David Anderson 2007-12-03 17:46:07 +00:00
parent de60bc19aa
commit f7c8bc5280
6 changed files with 31 additions and 20 deletions

View File

@ -10719,11 +10719,11 @@ Charlie 9 Nov 2007
clientgui/ clientgui/
sg_DlgPreferences.cpp sg_DlgPreferences.cpp
Janus 11 Nov 2007 Janus 11 Nov 2007
- User web: Factored out the supermassive if-sentence in forum.inc:show_post() - User web: Factored out the supermassive if-sentence in forum.inc:show_post()
It is now a seperate function called should_show_post() and it returns a It is now a seperate function called should_show_post() and it returns a
boolean. boolean.
html/inc/ html/inc/
forum.inc forum.inc
@ -11177,8 +11177,8 @@ David 16 Nov 2007
David 16 Nov 2007 David 16 Nov 2007
- manager: compile fix - manager: compile fix
clientgui/ clientgui/
BOINCTaskBar.cpp BOINCTaskBar.cpp
Rytis 17 Nov 2007 Rytis 17 Nov 2007
- user web: add "Powered by BOINC" logo to the repository and update - user web: add "Powered by BOINC" logo to the repository and update
@ -11697,15 +11697,15 @@ David 25 Nov 2007
forum_thread.php forum_thread.php
David 27 Nov 2007 David 27 Nov 2007
- API graphics: changes to REDUCED_ARRAY to support new S@h graphics - API graphics: changes to REDUCED_ARRAY to support new S@h graphics
- API: fix format codes in stack trace printf - API: fix format codes in stack trace printf
api/ api/
reduce.h reduce.h
reduce_lib.C reduce_lib.C
reduce_main.C reduce_main.C
lib/ lib/
diagnostics_win.C diagnostics_win.C
David 27 Nov 2007 David 27 Nov 2007
- client: clean up logic of handling DLL_INIT_FAILED exits on Win. - client: clean up logic of handling DLL_INIT_FAILED exits on Win.
@ -12058,3 +12058,14 @@ David 2 Dec 2007
client/ client/
hostinfo_unix.C hostinfo_unix.C
David 3 Dec 2007
- client: fix bug that would falsely report DLL init errors
- client: don't crash when detach a project using anonymous platform
(fixes #511)
client/
app_control.C
client_state.C,h
cs_cmdline.C
gui_rpc_server_ops.C

View File

@ -178,7 +178,7 @@ bool ACTIVE_TASK::has_task_exited() {
static void limbo_message(ACTIVE_TASK& at) { static void limbo_message(ACTIVE_TASK& at) {
#ifdef _WIN32 #ifdef _WIN32
if (at.result->exit_status = STATUS_DLL_INIT_FAILED) { if (at.result->exit_status == STATUS_DLL_INIT_FAILED) {
msg_printf(at.result->project, MSG_INFO, msg_printf(at.result->project, MSG_INFO,
"Task %s exited with a DLL initialization error.", "Task %s exited with a DLL initialization error.",
at.result->name at.result->name

View File

@ -1346,7 +1346,7 @@ int CLIENT_STATE::report_result_error(RESULT& res, const char* format, ...) {
// Note: does NOT delete persistent files or user-supplied files; // Note: does NOT delete persistent files or user-supplied files;
// does not delete project dir // does not delete project dir
// //
int CLIENT_STATE::reset_project(PROJECT* project) { int CLIENT_STATE::reset_project(PROJECT* project, bool detaching) {
unsigned int i; unsigned int i;
APP_VERSION* avp; APP_VERSION* avp;
APP* app; APP* app;
@ -1394,7 +1394,7 @@ int CLIENT_STATE::reset_project(PROJECT* project) {
// forcibly remove apps and app_versions // forcibly remove apps and app_versions
// (but not if anonymous platform) // (but not if anonymous platform)
// //
if (!project->anonymous_platform) { if (!project->anonymous_platform || detaching) {
avp_iter = app_versions.begin(); avp_iter = app_versions.begin();
while (avp_iter != app_versions.end()) { while (avp_iter != app_versions.end()) {
avp = *avp_iter; avp = *avp_iter;
@ -1439,7 +1439,7 @@ int CLIENT_STATE::detach_project(PROJECT* project) {
char path[256]; char path[256];
int retval; int retval;
reset_project(project); reset_project(project, true);
msg_printf(project, MSG_INFO, "Detaching from project"); msg_printf(project, MSG_INFO, "Detaching from project");

View File

@ -222,7 +222,7 @@ public:
APP_VERSION* lookup_app_version(APP*, char* platform, int ver); APP_VERSION* lookup_app_version(APP*, char* platform, int ver);
int detach_project(PROJECT*); int detach_project(PROJECT*);
int report_result_error(RESULT&, const char *format, ...); int report_result_error(RESULT&, const char *format, ...);
int reset_project(PROJECT*); int reset_project(PROJECT*, bool detaching);
bool no_gui_rpc; bool no_gui_rpc;
private: private:
int link_app(PROJECT*, APP*); int link_app(PROJECT*, APP*);

View File

@ -289,7 +289,7 @@ void CLIENT_STATE::do_cmdline_actions() {
canonicalize_master_url(reset_project_url); canonicalize_master_url(reset_project_url);
PROJECT* project = lookup_project(reset_project_url); PROJECT* project = lookup_project(reset_project_url);
if (project) { if (project) {
reset_project(project); reset_project(project, false);
msg_printf(project, MSG_INFO, "Project %s has been reset", reset_project_url); msg_printf(project, MSG_INFO, "Project %s has been reset", reset_project_url);
} else { } else {
msg_printf(NULL, MSG_USER_ERROR, "project %s not found\n", reset_project_url); msg_printf(NULL, MSG_USER_ERROR, "project %s not found\n", reset_project_url);

View File

@ -235,7 +235,7 @@ static void handle_project_op(char* buf, MIOFILE& fout, const char* op) {
if (!strcmp(op, "reset")) { if (!strcmp(op, "reset")) {
gstate.request_schedule_cpus("project reset by user"); gstate.request_schedule_cpus("project reset by user");
gstate.request_work_fetch("project reset by user"); gstate.request_work_fetch("project reset by user");
gstate.reset_project(p); gstate.reset_project(p, false);
} else if (!strcmp(op, "suspend")) { } else if (!strcmp(op, "suspend")) {
p->suspended_via_gui = true; p->suspended_via_gui = true;
gstate.request_schedule_cpus("project suspended by user"); gstate.request_schedule_cpus("project suspended by user");