diff --git a/checkin_notes b/checkin_notes
index 75348481bf..5e3a46cc5f 100644
--- a/checkin_notes
+++ b/checkin_notes
@@ -9060,7 +9060,7 @@ David 10 Nov 2009
client/
cs_account.cpp
-David 10 Nov 2009
+David 11 Nov 2009
- unix build: fix "out of tree" build (what's that?)
from Oliver Bock
@@ -9090,3 +9090,17 @@ Rom 11 Nov 2009
coproc.cpp
win_build/
*.vcproj
+
+David 11 Nov 2009
+ - client: fix yesterday's checkin to remove restrictions
+ on GUI RPC request elements.
+ You can now use either or
+ for empty request messages.
+ - GUI RPC client library: fix double-free bug.
+ it's not clear how this ever worked.
+
+ client
+ gui_rpc_server_ops.cpp
+ lib/
+ coproc.cpp
+ gui_rpc_client.cpp
diff --git a/client/gui_rpc_server_ops.cpp b/client/gui_rpc_server_ops.cpp
index b02e9b0e92..0bc71e2ed8 100644
--- a/client/gui_rpc_server_ops.cpp
+++ b/client/gui_rpc_server_ops.cpp
@@ -1057,6 +1057,11 @@ static void handle_set_cc_config(char* buf, MIOFILE& fout) {
);
}
+// Some of the RPCs have empty-element request messages.
+// We accept both and
+//
+#define match_req(buf, tag) (match_tag(buf, "<" tag ">") || match_tag(buf, "<" tag "/>"))
+
int GUI_RPC_CONN::handle_rpc() {
char request_msg[4096];
int n, retval=0;
@@ -1088,14 +1093,14 @@ int GUI_RPC_CONN::handle_rpc() {
// - if we get an unexpected auth1 or auth2, disconnect
mf.printf("\n");
- if (match_tag(request_msg, "\n");
gstate.write_tasks_gui(mf, active_only);
mf.printf("\n");
- } else if (match_tag(request_msg, "\n");
gstate.read_global_prefs();
gstate.request_schedule_cpus("Preferences override");
gstate.request_work_fetch("Preferences override");
- } else if (match_tag(request_msg, "\n");
read_config_file(false);
msg_printf(0, MSG_INFO, "Re-read config file");
@@ -1225,7 +1230,7 @@ int GUI_RPC_CONN::handle_rpc() {
gstate.set_ncpus();
gstate.request_schedule_cpus("Core client configuration");
gstate.request_work_fetch("Core client configuration");
- } else if (match_tag(request_msg, "