commit 2031ab921cbbddc6f0cc782aa24ea8f7a6f50a52
Author: Jacob Nevins <0jacobnk.gna@chiark.greenend.org.uk>
Date:   Tue Mar 5 01:16:03 2013 +0000

    If the client fails to get 'hack' access to its spawned server, shut it
    down forcibly rather than trying '/quit' (which needs hack).
    
    See gna bug #20555.

diff --git client/connectdlg_common.c client/connectdlg_common.c
index 44fdd2b..23a2cbc 100644
--- client/connectdlg_common.c
+++ client/connectdlg_common.c
@@ -131,12 +131,12 @@ bool can_client_access_hack(void)
 void client_kill_server(bool force)
 {
   if (is_server_running()) {
-    if (client.conn.used) {
+    if (client.conn.used && client_has_hack) {
       /* This does a "soft" shutdown of the server by sending a /quit.
        *
        * This is useful when closing the client or disconnecting because it
        * doesn't kill the server prematurely.  In particular, killing the
-       * server in the middle of a save can have disasterous results.  This
+       * server in the middle of a save can have disastrous results.  This
        * method tells the server to quit on its own.  This is safer from a
        * game perspective, but more dangerous because if the kill fails the
        * server will be left running.
@@ -152,8 +152,9 @@ void client_kill_server(bool force)
       server_pid = -1;
 #endif
     } else if (force) {
-      /* Looks like we've already disconnected.  So the only thing to do
-       * is a "hard" kill of the server. */
+      /* Either we already disconnected, or we didn't get control of the
+       * server. In either case, the only thing to do is a "hard" kill of
+       * the server. */
 #ifdef WIN32_NATIVE
       TerminateProcess(server_process, 0);
       CloseHandle(server_process);
