? mw.patch
Index: services.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/services/Attic/services.module,v
retrieving revision 1.3.2.10
diff -u -F^f -r1.3.2.10 services.module
--- services.module	13 Jul 2008 03:53:22 -0000	1.3.2.10
+++ services.module	3 Aug 2008 04:23:53 -0000
@@ -576,9 +576,7 @@ function services_session_load($sessid) 
   $backup->session = session_encode();
 
   // Empty current session data
-  foreach ($_SESSION as $key => $value) {
-    unset($_SESSION[$key]);
-  }
+  $_SESSION = array();
 
   // Some client/servers, like XMLRPC, do not handle cookies, so imitate it to make sess_read() function try to look for user,
   // instead of just loading anonymous user :).
@@ -592,7 +590,11 @@ function services_session_load($sessid) 
     services_session_unload($backup);
     return NULL;
   }
-
+  
+  // Prevent saving of this implersonation in case of unexpected failure. 
+  // See http://drupal.org/node/218104.
+  session_save_session(FALSE);
+  
   return $backup;
 }
 
@@ -615,12 +617,11 @@ function services_session_unload($backup
   sess_write($user->sid, session_encode());
 
   // Empty current session data
-  foreach ($_SESSION as $key => $value) {
-    unset($_SESSION[$key]);
-  }
+  $_SESSION = array();
 
   // Revert to previous user and session data
   $user = $backup;
   session_decode($user->session);
+  session_save_session(TRUE);
 }
 
