--- xfce4-session-4.8.3.orig/xfce4-session/xfsm-manager.c 2012-02-12 15:44:26.000000000 +0000 +++ xfce4-session-4.8.3/xfce4-session/xfsm-manager.c 2012-07-23 19:34:37.206335791 +0100 @@ -981,7 +981,9 @@ XfsmClient *cl = lp->data; if (xfsm_client_get_state (cl) == XFSM_CLIENT_INTERACTING) { - xfsm_client_set_state (cl, XFSM_CLIENT_WAITFORINTERACT); + // a client is already interacting, so new client has to wait + xfsm_client_set_state (client, XFSM_CLIENT_WAITFORINTERACT); + xfsm_manager_cancel_client_save_timeout(manager, client); return; } } @@ -1267,7 +1269,12 @@ XfsmClient *client, gboolean success) { - if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVING && xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL) + /* In xfsm_manager_interact_done we send SmsShutdownCancelled to clients in + XFSM_CLIENT_WAITFORINTERACT state. They respond with SmcSaveYourselfDone + (xsmp_shutdown_cancelled in libxfce4ui library) so we allow it here. */ + if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVING && + xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL && + xfsm_client_get_state (client) != XFSM_CLIENT_WAITFORINTERACT) { xfsm_verbose ("Client Id = %s send SAVE YOURSELF DONE, while not being " "in save mode. Prepare to be nuked!\n",